Und mit der ältesten Datei ganz unten?
Wenn ich das mache, ist es dann auch möglich, die redundanten Header aus jeder HTML-Datei zu entfernen? Ich stelle fest, dass ich viele HTML-Dateien verkette und es wäre schön, die Dateigröße der endgültigen Datei ein wenig zu reduzieren.
Antwort1
Zum Verketten von Dateien verwenden Sie
cat file1 file2 file3 ...
Um eine Liste zitierter Dateinamen nach Zeit sortiert zu erhalten (neueste zuerst), verwenden Sie
ls -t
Alles in allem,
cat $(ls -t) > outputfile
Möglicherweise möchten Sie einige Argumente angeben ls
(z. B. *.html
).
Dies funktioniert jedoch nicht, wenn Ihre Dateinamen Leerzeichen enthalten. My file.html
Es wird davon ausgegangen, dass es sich um zwei Dateinamen handelt: My
und file.html
. Sie können ls
die Dateinamen in Anführungszeichen setzen und dann verwenden xargs
, das die Anführungszeichen versteht, um die Argumente an zu übergeben cat
.
ls -tQ | xargs cat
Was Ihre zweite Frage betrifft, ist das Herausfiltern von Teilen von Dateien nicht schwierig, es hängt jedoch davon ab, was genau Sie entfernen möchten. Was sind die „redundanten Header“?
Antwort2
Der einfachste Weg, Dateien in einer anderen als der lexikografischen Reihenfolge aufzulisten, ist mit zshGlob-Qualifikation. Ohne zsh können Sie verwenden ls
, aberDas Parsen der Ausgabe ls
ist mit Gefahren verbunden.
cat *(om)
Wenn Sie einige Zeilen entfernen möchten, verwenden Sie sed, awk oder perl. So können Sie beispielsweise die <head>
aus der ersten Datei nehmen und die <body>
Teile aus den anderen Dateien kombinieren, vorausgesetzt, dass die Tags <body>
und </body>
in jeder Datei allein in einer Zeile stehen:
{
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
Erläuterung:
- Zuerst
concatenated.html
wird erstellt. Es ist daher die jüngste*.html
Datei (vorausgesetzt, keine Datei hat ein Datum in der Zukunft). - Kopieren Sie dann aus der zweitjüngsten
*.html
Datei, brechen Sie jedoch an dieser</body>
Zeile ab. - Kopieren Sie dann aus den anderen Dateien, überspringen Sie jedoch alles bis zur
<body>
Zeile und beginnen Sie mit der</body>
Zeile. - Erstellen Sie abschließend die letzten schließenden Tags.
Antwort3
Die von @angus bereitgestellte Lösung ist gut, wird aber Probleme verursachen, wenn sich im Ordner Verzeichnisse befinden. Das Problem wird durch diese Lösung behoben.
cat $(ls -tpa | grep -v / )