名前にスペースを含むいくつかのファイルを含むディレクトリがある場合
$ 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
コマンド)に直接渡します。