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


23

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

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

5
man find(1)誰でも簡単に見つけられるように、詳細に説明されています。怠けてはいけません。
ミロスラフコシュカル

ミロスラフ、ありがとうございますman exec

ああ、私は{} +以前に使用法に出くわしたことがありませんでした。私は通常xargsを使用します(そしてしばしばfind ... -print0 | xargs -0 ...

回答:


27

使用;(セミコロン)または+(プラス記号)はによって呼び出されるシェルコマンド終了するために必須である-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つのインスタンスのみが許可されます。

こちらもご覧ください:


そこの違い、主要な一つは。user1116056の回答を参照してください
ヤヒド

24

コマンド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

5

としてman find

-exec command {} +この-execアクションのバリアントは、選択されたファイルに対して指定されたコマンドを実行しますが、コマンドラインは、選択された各ファイル名を最後に追加することによって構築されます。コマンドの呼び出しの総数は、一致するファイルの数よりもはるかに少なくなります。コマンドラインは、xargsがコマンドラインを作成するのとほぼ同じ方法で作成されます。コマンド内では '{}'の1つのインスタンスのみが許可されます。コマンドは開始ディレクトリで実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.