「find」コマンドで「\;」とはどういう意味ですか? [コピー]

「find」コマンドで「\;」とはどういう意味ですか? [コピー]

コマンドとは\; どういう意味ですか?findそれを使う理由は何ですか?

マニュアルには次の例があります。

find . -type f -exec file '{}' \;

なぜダメ: find . -type f -exec file '{}'

答え1

コマンドfindには、実行する必要があるコマンドの-exec終わりを知らせる方法が必要です。;コマンドの終わりに1つがないと、findコマンドが終わる場所と(おそらく)他のフラグが続く場所はわかりませんfind

basenameすべてのファイルとすべてのディレクトリlsで実行される無意味な例:

find . '(' -type f -exec basename {} ';' ')' -o '(' -type d -exec ls {} ';' ')'

;上記がなければ、実行するかどうかはfindわかりません。basename /some/pathbasename /some/path ')' -o '(' ...

;シェルがそれをコマンド区切り文字として扱わないように、justを引用またはエスケープします。

あまり意味のない例では、最初に.txtファイルを特定のディレクトリにコピーし、その.done名前を追加して元のファイルの名前を変更します(コピーが成功した場合)。

find . -type f -name '*.txt'
    -exec cp {} /some/path/dest ';' \
    -exec mv {} {}.done ';'

(Eliah Kaganがコメントで指摘したように、この構成は{}.done厳密に移植できませんが、実装定義。実装では、{}文字を現在のパス名に拡張しないように選択することもできます。私の経験では、すべてのfind実装はする{}このような他の文字列と関連付けても、現在のパス名に展開されます。 )

;前の例でこれがなかった場合は、見つかったファイルや名前付きファイルなどに対してコマンドを実行しfindたいかどうかはわかりませんでした。cp/some/path/dest-execmv

関連情報