-T
を使用 tar の機能を使用して、別のファイルからファイルのリストを読み取るように指示します (tar は各行を個別のファイルとして扱います)。
その後、 <()
を使用できます シェルにコマンドの出力から疑似ファイルを生成させる表記:
tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")
シェルが <()
をサポートしていない場合 表記、一時ファイルを使用できます:
find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list
次のように、find の -print0 機能を xargs の -0 機能と一緒に使用できます。
find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar
-print0 (ハイフン プリント ゼロ) は、パス間の区切り文字としてスペースではなくヌルを使用するように find に指示し、-0 (ハイフン ゼロ) は xargs に同じものを期待するように指示します。
追加のために編集:
多数のファイルがある場合、xargs は tar を複数回呼び出すことがあります。これに対処する方法についてはコメントを参照するか、次のように find で tar を直接呼び出すようにします。これは、名前にスペースや改行が含まれていても、任意の数のファイルで機能します。
rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +
「-T」に続く引数が「-」の場合、ファイルのリストは stdin から取得されます。最近のバージョンの tar は通常、「-T " オプションは null で区切られています。
したがって、以下は改行文字を含む可能性のある任意の数のファイルで動作します:
find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar