"find -exec"はスペースを含むファイル名をどのように渡しますか?

名前にスペースを含むいくつかのファイルを含むディレクトリがある場合

$ ls -1 dir1
file 1
file 2
file 3

次のように、すべてのエントリを別のディレクトリに正常にコピーできます。

$ find dir1 -mindepth 1 -exec cp -t dir2 {} +

ただし、の出力にはfind dir1 -mindepth 1エスケープされていないスペースが含まれています。

$ find dir1 mindepth 1
dir1/file 1
dir1/file 3
dir1/file 3

print0代わりに使用すると、print出力にまだエスケープされていないスペースが含まれます。

$ find dir1 mindepth 1 -print0
dir1/file 1dir1/file 2dir1/file 3

これらのファイルを手動でコピーするにはcpスペースをエスケープする必要がありますが、引数が出cpたときにコマンドの最後にまたはをfind使用すると不要なようです。+\;

その理由は何ですか?

ベストアンサー1

コマンドはfindコマンドを直接実行します。このコマンド(filename引数を含む)は、シェルまたはファイル名を変更できる他の項目によって処理されません。とても安全です。

{}コマンドラインに表示されているファイル名をエスケープする必要はありませんfind

findディスクの元のファイル名をコマンドの内部パラメータのリスト(-execあなたの場合はcpコマンド)に直接渡します。

おすすめ記事