{} +
コマンドの意味とexec
の違いを知りたいです。これらの2つの違いは正確に何ですか?{} +
{} \;
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
答え1
シェルコマンドを終了/呼び出しするには、;
(セミコロン)または(プラス記号)を使用する必要があります。+
-exec
execdir
;
(セミコロン)と(プラス記号)の違いは、引数+
がfindの-exec
/-execdir
引数に渡される方法です。たとえば、
使用
;
複数のコマンドを実行します(各パラメータに対して個別に)、例:
$ find /etc/rc* -exec echo Arg: {} ';' Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot
以下のパラメーターはすべて、
find
このコマンドのパラメーターと見なされます。この文字列は、
{}
現在処理中のファイル名に置き換えられます。使用
+
できるだけ少ない数のコマンドを実行します。(パラメータは一緒にグループ化されているためです)コマンドと非常によく似ているxargs
ため、各コマンドでできるだけ多くの引数を使用して、1行あたりの引数の最大制限を超えません。例:
$ find /etc/rc* -exec echo Arg: {} '+' Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
コマンドラインは、選択した各ファイル名を最後に追加することで設定されます。
{}
このインスタンスはコマンドに 1 つだけ許可されます。
また見なさい:
答え2
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
答え3
によるとman find
:
- コマンドの実行{}+-execジョブのこのバリエーションは、選択したファイルで指定されたコマンドを実行しますが、コマンドラインは選択した各ファイル名を最後に追加することによって構成されます。コマンドの総呼び出し数は、一致するファイルの数よりはるかに少なくなります。 。コマンドラインは、xargsがコマンドラインを作成するのとほぼ同じ方法で作成されます。コマンドには「{}」インスタンスが1つだけ許可されます。このコマンドは起動ディレクトリで実行されます。