スペースを含むファイルを検索してコピーするにはどうすればいいですか?

スペースを含むファイルを検索してコピーするにはどうすればいいですか?

サブディレクトリ内のファイルを検索し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 \;

よりシンプルなので、エラーが発生する可能性が低くなります。唯一の注意点は、相対パスではなく絶対パスを使用することを忘れないでください。

関連情報