A z najstarszym plikiem na dole?
Ponadto, jeśli to zrobię, czy mogę również usunąć zbędne nagłówki zawarte w każdym pliku HTML? Widzę, że łączę wiele plików HTML i fajnie byłoby trochę zmniejszyć rozmiar ostatecznego pliku.
źródło
A z najstarszym plikiem na dole?
Ponadto, jeśli to zrobię, czy mogę również usunąć zbędne nagłówki zawarte w każdym pliku HTML? Widzę, że łączę wiele plików HTML i fajnie byłoby trochę zmniejszyć rozmiar ostatecznego pliku.
Do łączenia używanych plików
cat file1 file2 file3 ...
Aby uzyskać listę cytowanych nazw plików posortowaną według czasu, najpierw użyj najnowszej
ls -t
Kładąc wszystko razem,
cat $(ls -t) > outputfile
Możesz podać kilka argumentów ls
(np *.html
.).
Ale jeśli masz nazwy plików ze spacjami, to nie zadziała. My file.html
zakłada się, że są to dwie nazwy plików: My
i file.html
. Możesz zrobić ls
cytowanie nazw plików, a następnie użyć xargs
, kto rozumie cytowanie, aby przekazać argumenty cat
.
ls -tQ | xargs cat
Jeśli chodzi o twoje drugie pytanie, odfiltrowanie części plików nie jest trudne, ale zależy to od tego, co dokładnie chcesz usunąć. Jakie są „zbędne nagłówki”?
cat $(ls -t) > outputfile
, w przeciwnym raziecat
odrzuca podane nazwy plikówcat $(ls -t)
jest również podatny na rozszerzenie nazw plików. Jeśli istnieje nazwa pliku z wyrażeniem*
, lub?
, lub wyrażeniem w nawiasie (np.file-[old].html
); a jeśli nazwa pliku interpretowana jako wzorzec pasuje do innych nazw plików; podejście spowoduje niepoprawną listę.set -f
rozwiązałby ten problem.ls -Q
może wytwarzać produkt, który nie jest odpowiednixargs
. Na przykład"foo"
staje się"\"foo\""
, ale xargs nie rozpoznaje podwójnych cudzysłowów w ciągach cudzysłowów.Najłatwiejszym sposobem wyświetlania plików w kolejności innej niż leksykograficzna jest użycie kwalifikatorów globu zsh . Bez zsh możesz używać
ls
, ale parsowanie wyjścials
jest obarczone niebezpieczeństwami .Jeśli chcesz usunąć niektóre linie, użyj sed, awk lub perl. Na przykład, aby pobrać
<head>
pierwszy plik i połączyć<body>
części z innych plików, zakładając, że znaczniki<body>
i</body>
są same w jednym wierszu w każdym pliku:Wyjaśnienie:
concatenated.html
jest tworzony. Jest to zatem najmłodszy*.html
plik (zakładając, że żaden plik nie ma daty w przyszłości.*.html
pliku, ale wyjdź z</body>
linii.<body>
linii i zaczynając od</body>
linii.źródło
Rozwiązanie podane przez @angus jest dobre, ale będzie miało problemy, jeśli w folderze znajdują się katalogi, to to naprawi.
cat $(ls -tpa | grep -v / )
źródło