コマンドとは\;
どういう意味ですか?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/path
basename /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
-exec
mv