find でファイルを検索して、その結果を xargs に渡して cp でコピーする方法。
例えば、あるディレクトリ以下の png ファイルを OUTPUT_DIRECTORY にコピーしたい場合は以下のようにやります。
$ find . -name '*.png' -print | xargs cp -t OUTPUT_DIRECTORY
mv も同様に -t オプションでいけます。
● find, xargs, cp, mv
主に Linux (Ubuntu, Fedora) 関連の設定メモ&小技集です。たまに Windows 関連ネタも。
find でファイルを検索して、その結果を xargs に渡して cp でコピーする方法。
例えば、あるディレクトリ以下の png ファイルを OUTPUT_DIRECTORY にコピーしたい場合は以下のようにやります。
$ find . -name '*.png' -print | xargs cp -t OUTPUT_DIRECTORY
mv も同様に -t オプションでいけます。
● find, xargs, cp, mv
2 コメント:
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 さん
コメントありがとうございました。
なるほど。参考にさせていただきます。
(こんな技があるのか)
コメントを投稿