回答:
使用するファイルを連結するには
cat file1 file2 file3 ...
時間でソートされた引用符で囲まれたファイル名のリストを取得するには、最新のものを最初に使用します。
ls -t
すべてを一緒に入れて、
cat $(ls -t) > outputfile
ls
(例えば*.html
)にいくつかの引数を与えたいかもしれません。
ただし、スペースを含むファイル名がある場合、これは機能しません。My file.html
は2つのファイル名と見なされます:My
とfile.html
。ls
ファイル名を引用符で囲んでから、引用符xargs
を理解しているを使用して、引数をに渡すことができますcat
。
ls -tQ | xargs cat
2番目の質問については、ファイルの一部を除外することは難しくありませんが、何を削除するかによって異なります。「冗長ヘッダー」とは何ですか?
cat $(ls -t)
また、ファイル名の展開に対して脆弱です。ファイル名に*
、または?
、またはブラケット式(例file-[old].html
)がある場合; パターンとして解釈されるファイル名が他のファイル名と一致する場合。このアプローチでは、誤ったリストが作成されます。set -f
この欠陥に対処します。
ls -Q
に適さない出力を生成する場合がありxargs
ます。たとえば、に"foo"
なりますが"\"foo\""
、xargsは二重引用符で囲まれた文字列内のエスケープされた二重引用符を理解しません。
辞書編集以外の順序でファイルをリストする最も簡単な方法は、zsh glob修飾子を使用することです。zshがなくてもを使用できますls
が、の出力の解析にls
は危険が伴います。
cat *(om)
一部の行を削除する場合は、sed、awk、またはperlを使用します。たとえば<head>
、最初のファイルから取得<body>
し、他のファイルの部分を結合するには、すべてのファイルの行にタグ<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
説明:
concatenated.html
作成されます。したがって、これは最も若い*.html
ファイルです(将来の日付を持つファイルがないと仮定します)。*.html
ファイルからコピーしますが、その</body>
行で終了します。<body>
行まですべてをスキップし、その行から始め</body>
ます。
cat $(ls -t) > outputfile
。そうでない場合cat
、引用されたファイル名を拒否します