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.
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.
Odpowiedzi:
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)
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 odpowiedni xargs
. 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ścia ls
jest obarczone niebezpieczeństwami .
cat *(om)
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:
{
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
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.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 / )
cat $(ls -t) > outputfile
, w przeciwnym raziecat
odrzuca podane nazwy plików