En alttaki en eski dosya ile mi?
Ayrıca, bunu yaparsam, her HTML dosyasında bulunan gereksiz başlıkları çıkarmak da mümkün mü? Kendimi HTML dosyaları bir sürü birleştirmek görüyorum ve nihai dosyanın dosya boyutunu biraz azaltmak güzel olurdu.
En alttaki en eski dosya ile mi?
Ayrıca, bunu yaparsam, her HTML dosyasında bulunan gereksiz başlıkları çıkarmak da mümkün mü? Kendimi HTML dosyaları bir sürü birleştirmek görüyorum ve nihai dosyanın dosya boyutunu biraz azaltmak güzel olurdu.
Yanıtlar:
Kullandığınız dosyaları birleştirmek için
cat file1 file2 file3 ...
Alıntılanan dosya adlarının zamana göre sıralanmış bir listesini almak için, önce en yenisi,
ls -t
Hepsini bir araya koy,
cat $(ls -t) > outputfile
ls(Örneğin, *.html) için bazı argümanlar vermek isteyebilirsiniz .
Ancak, içinde boşluk olan dosya adlarınız varsa, bu işe yaramaz. My file.htmliki dosya adı olarak kabul edilecektir: Myve file.html. lsDosya adlarını alıntı yapabilir ve daha sonra, alıntıyı xargsanlayan, bağımsız değişkenleri iletmek için kullanabilirsiniz cat.
ls -tQ | xargs cat
İkinci sorunuza gelince, dosyaların parçalarını filtrelemek zor değildir, ancak tam olarak neyi çıkarmak istediğinize bağlıdır. “Yedek başlıklar” nelerdir?
cat $(ls -t)dosya adının genişletilmesine de açıktır. *, Veya ?, veya köşeli ayraç ifadesi olan bir dosya adı varsa (örneğin file-[old].html); ve kalıp olarak yorumlanan dosya adının diğer dosya adlarıyla eşleşip eşleşmediği; yaklaşım yanlış bir liste oluşturacaktır. set -fbu eksikliği giderir.
ls -Qiçin uygun olmayan çıktılar üretebilir xargs. Örneğin, "foo"olur "\"foo\"", ancak xargs çift tırnaklı dizelerde kaçan çift tırnak işaretlerini anlamıyor.
Sözcük bilgisi dışındaki bir sırayla dosyaları listelemenin en kolay yolu zsh glob niteleyicileridir . Zsh olmadan kullanabilirsiniz ls, ancak çıktısını ayrıştırmak lstehlikelerle doludur .
cat *(om)
Bazı çizgileri çıkarmak istiyorsanız, sed veya awk veya perl kullanın. Örneğin , ve etiketlerinin her dosyadaki bir satırda yalnız olduğunu varsayarak <head>, ilk dosyadan almak ve <body>diğer dosyalardan parçaları birleştirmek için :<body></body>
{
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
Açıklama:
concatenated.htmlolarak oluşturulur. Bu nedenle en genç *.htmldosyadır (hiçbir dosyanın gelecekte bir tarihi olmadığı varsayılarak).*.htmldosyadan kopyalayın , ancak </body>satırdan çıkın .<body>satıra atlayın ve satırdan </body>başlayın.@Angus tarafından verilen çözüm iyidir, ancak klasörde dizinler varsa bu sorunu çözecektir.
cat $(ls -tpa | grep -v / )
cat $(ls -t) > outputfile, aksi takdirdecatalıntı yapılan dosya adlarını reddediyor