最も古いファイルは一番下にありますか?
そして、これにより、各HTMLファイルに含まれる重複したヘッダーも削除できますか?複数のHTMLファイルを結びつける様子を見ると、最終ファイルのファイルサイズを少し縮めることができればいいと思います。
答え1
使用するファイルをリンク
cat file1 file2 file3 ...
参照されたファイル名の時系列リストを最新の項目から取得するには、次のようにします。
ls -t
一緒に撮った、
cat $(ls -t) > outputfile
ls
(たとえば)に*.html
いくつかのパラメータを提供できます。
ただし、この方法はファイル名にスペースが含まれている場合は機能しません。My file.html
2つのファイル名と見なされます。ファイル名を引用して、My
Understanding -quotedを使用して引数を渡すfile.html
ことができます。ls
xargs
cat
ls -tQ | xargs cat
2番目の質問では、一部のファイルをフィルタリングすることは難しくありませんが、正確に削除したい項目によって異なります。 「冗長ヘッダ」とは何ですか?
答え2
アルファベット順ではなく順番にファイルをリストする最も簡単な方法は、zsh を使用することです。グローバル予選。 zshがなくても使えますls
が、解析された出力ls
には危険があります。。
cat *(om)
特定の行を削除するには、sed、awk、またはperlを使用してください。たとえば、<head>
最初のファイルの一部を取得し、<body>
他のファイルから結合するには、<body>
タグ</body>
が各ファイルの1行に個別にあるとします。
{
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
説明する:
- まず、
concatenated.html
生成されます。したがって、最も若い*.html
ファイルです(将来の日付のファイルがないと仮定)。 - 次に、2番目に小さい
*.html
ファイルからコピーしますが、行で終了します</body>
。 - その後、別のファイルからコピーしますが、その行
<body>
のすべての項目をスキップして</body>
その行から始めます。 - 最後に最後に閉じるタグを生成します。
答え3
@angusが提供するソリューションは素晴らしいですが、フォルダ内にディレクトリがあると問題が発生するため、解決されます。
cat $(ls -tpa | grep -v / )