2010年3月20日土曜日

find で検索した結果を xargs 経由でコピー

find でファイルを検索して、その結果を xargs に渡して cp でコピーする方法。

例えば、あるディレクトリ以下の png ファイルを OUTPUT_DIRECTORY にコピーしたい場合は以下のようにやります。

$ find . -name '*.png' -print | xargs cp -t OUTPUT_DIRECTORY

mv も同様に -t オプションでいけます。

● find, xargs, cp, mv

2 件のコメント:

pentium64fx さんのコメント...

find . -name '*.png' -print0 | xargs -0 cp -t OUTPUT_DIRECTORY
とやるほうが安全です。
ファイル名にスペースが含まれると(普通はないと思いますがsambaとかに入れる人がいます)
touch 'abc def.png'
find . -name '*.png' | xargs cp -t OUTPUT_DIRECTORY
cp: ./abc: No such file or directory
cp: def.png: No such file or directory

findコマンドは区切り文字としてスペースを使っているからこうなります。findコマンドの -print0 オプションを有効にすると区切り文字がスペースから \0 に変更され、xargsコマンドは、-0オプションを指定されると \0 を区切り文字として扱います。

まさお さんのコメント...

pentium64fx さん
コメントありがとうございました。
なるほど。参考にさせていただきます。
(こんな技があるのか)