サブディレクトリ内のファイルを検索しmp3
、たとえば現在のディレクトリにコピーしようとしています。試したコマンドは次のとおりです。
find . -name *.mp3 -ls | gawk '{printf("cp %s .\n", $11);}'
コマンドfind
は正しくエスケープされたすべてのファイルをリストしますが、gawk
問題があるようです。find
コマンドは、たとえば次のファイルをリストします。
8132326 7392 -rw-r--r-- 1 alexander alexander 7566180 Nov 27 20:22 ./For\ The\ Kids\ EP\ [12_\ Vinyl\ EP\ -\ DP003]/01\ A1\ For\ the\ Kids.mp3
コマンドは文字列gawk
として認識します$11
./For
の代わりに
./For\ The\ Kids\ EP\ [12_\ Vinyl\ EP\ -\ DP003]/01\ A1\ For\ the\ Kids.mp3
それはなぜでしょうか? また、これを正しく処理するにはどうすればよいでしょうか ( の有無にかかわらずgawk
)?
答え1
正しいコマンドは
find /folder/to/be/searched -type f -name '*.mp3' -exec cp "{}" /target/folder \;
よりシンプルなので、エラーが発生する可能性が低くなります。唯一の注意点は、相対パスではなく絶対パスを使用することを忘れないでください。