GNU/Linux >> Linux の 問題 >  >> Linux

名前に特殊文字を含むファイルでの find および tar の使用

-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

Linux
  1. Linuxで最大のファイルとディレクトリを探す

  2. Linuxでtarコマンドを使用してファイルを圧縮および抽出する方法は?

  3. Linux で find コマンドを使用して、スペースのあるファイルを検索して削除する

  1. Linuxのfindコマンドの使用–例を使用した使用法

  2. 特殊文字でSedを使用していますか?

  3. 文字列を含む名前のすべてのファイルを検索

  1. ファイルを検索してコピーする

  2. ファイルを検索して tar (スペースを含む)

  3. ls と grep を使用して実行可能ファイルを見つける