findの-execコマンドで{} +はどういう意味ですか?

findの-execコマンドで{} +はどういう意味ですか?

{} +コマンドの意味とexecの違いを知りたいです。これらの2つの違いは正確に何ですか?{} +{} \;

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

答え1

シェルコマンドを終了/呼び出しするには、;(セミコロン)または(プラス記号)を使用する必要があります。+-execexecdir

;(セミコロン)と(プラス記号)の違いは、引数+が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つだけ許可されます。このコマンドは起動ディレクトリで実行されます。

関連情報