E con il file più vecchio in fondo?
Inoltre, se lo faccio, è anche possibile eliminare le intestazioni ridondanti contenute in ciascun file HTML? Mi vedo concatenare molti file HTML e sarebbe bello ridurre un po 'le dimensioni del file finale.
E con il file più vecchio in fondo?
Inoltre, se lo faccio, è anche possibile eliminare le intestazioni ridondanti contenute in ciascun file HTML? Mi vedo concatenare molti file HTML e sarebbe bello ridurre un po 'le dimensioni del file finale.
Risposte:
Per concatenare i file utilizzati
cat file1 file2 file3 ...
Per ottenere un elenco di nomi di file citati ordinati per ora, il più recente per primo, si utilizza
ls -t
Mettere tutto insieme,
cat $(ls -t) > outputfile
Potresti voler dare alcuni argomenti a ls(ad es *.html.).
Ma se hai nomi di file con spazi, questo non funzionerà. My file.htmlsi presume che siano due nomi di file: Mye file.html. Puoi fare una lscitazione dei nomi dei file e quindi usare xargs, chi comprende la citazione, a cui passare gli argomenti cat.
ls -tQ | xargs cat
Per quanto riguarda la tua seconda domanda, filtrare parti di file non è difficile, ma dipende da cosa esattamente vuoi eliminare. Quali sono le "intestazioni ridondanti"?
cat $(ls -t)è anche vulnerabile all'espansione del nome file. Se esiste un nome file con un'espressione parentesi *, o ?, oppure (ad es. file-[old].html); e se il nome file interpretato come modello corrisponde ad altri nomi di file; l'approccio produrrà un elenco errato. set -faffronterebbe questa carenza.
ls -Qpuò produrre output per cui non è adatto xargs. Ad esempio, "foo"diventa "\"foo\"", ma xargs non comprende le virgolette doppie con escape tra stringhe tra virgolette doppie.
Il modo più semplice per elencare i file in un ordine diverso da quello lessicografico è con i qualificatori di zsh glob . Senza zsh, puoi usare ls, ma analizzare l'output di lsè irto di pericoli .
cat *(om)
Se si desidera eliminare alcune righe, utilizzare sed o awk o perl. Ad esempio, per prendere il <head>dal primo file e combinare le <body>parti dagli altri file, supponendo che i tag <body>e </body>siano soli su una riga in ogni file:
{
sed -e '/<\/body>/ q' *.html(om[2])
sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1])
echo '</body>'
echo '</html>'
} >concatenated.html
Spiegazione:
concatenated.htmlviene creato. È quindi il *.htmlfile più giovane (supponendo che nessun file abbia una data futura.*.htmlfile più giovane , ma esci dalla </body>riga.<body>linea e inizia con la </body>linea.La soluzione fornita da @angus è buona ma avrà problemi se ci sono directory nella cartella che lo risolveranno.
cat $(ls -tpa | grep -v / )
cat $(ls -t) > outputfile, altrimenticatrifiuta i nomi dei file citati