回答:
使用;
(セミコロン)または+
(プラス記号)はによって呼び出されるシェルコマンド終了するために必須である-exec
/をexecdir
。
;
(セミコロン)または+
(プラス記号)の違いは、引数がfindの-exec
/ -execdir
パラメーターに渡される方法です。例えば:
using ;
は、複数のコマンドを(引数ごとに個別に)実行します。
例:
$ find /etc/rc* -exec echo Arg: {} ';'
Arg: /etc/rc.common
Arg: /etc/rc.common~previous
Arg: /etc/rc.local
Arg: /etc/rc.netboot
以下のすべての
find
引数は、コマンドの引数と見なされます。文字列
{}
は、処理中の現在のファイル名に置き換えられます。
using +
は、可能な限り少ないコマンドを実行します(引数が結合されるため)。これはxargs
コマンドの動作に非常に似ているため、コマンドごとにできるだけ多くの引数を使用して、行ごとの引数の上限を超えないようにします。
例:
$ find /etc/rc* -exec echo Arg: {} '+'
Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
コマンドラインは、選択した各ファイル名を最後に追加することによって作成されます。
{}
コマンド内では1つのインスタンスのみが許可されます。
こちらもご覧ください:
コマンドfindが3つのファイルの下にあると仮定します。
fileA
fileB
fileC
-exec
プラス+
記号()を使用する場合、
find . -type f -exec chmod 775 {} +
そうなる:
chmod 775 fileA fileB fileC
コマンドラインは、一致する各ファイル名を末尾に追加することで作成されます。これは、xargs
コマンドラインを作成するのと同じ方法です。コマンドの呼び出しの総数(chmod
この場合は)は、一致するファイルの数よりもはるかに少なくなります。
-exec
セミコロン(;
)で使用する場合、
find . -type f -exec chmod 775 {} \;
そうなる:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
man find(1)
誰でも簡単に見つけられるように、詳細に説明されています。怠けてはいけません。