find / path / -execコマンド '{}' +の+は何ですか?


13

+find /path/ -exec command '{}' +しますか?とは対照的にfind /path/ -exec command '{}' \;

回答:


17

「+」は、見つかったすべてのファイルから1つの大きなコマンド行を作成して、実行するコマンドの数を最小限にします。

findコマンドが4つのファイルを検出する場合を考えます。

find . -type f -exec command '{}' \;

生産するだろう

command file1
command file2
command file3
command file4 

一方

find . -type f -exec command '{}' \+

生産する

command file1 file2 file3 file4

3
を知っている場合、と同じですがxargs、引用の問題-exec … {} +はありません-print | xargs …-print0 | xargs -0別の方法ですが、移植性が低くなります)。
ジル「SO-悪であるのをやめる」

4

manページから:

-execコマンド{} +

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


1
非常に...簡潔な男ですか?深さと明快さが欠けていることがわかりました。
xenoterracide

アイデアは、ファイルごとに盲目的に1つのプロセスを生成するのではなく、ファイル名をまとめてコマンドを呼び出す回数を減らすことです。例:3つの異なる「rm FILENAME」プロセスを作成する代わりに、ファイル名を収集し、「rm FILE1 FILE2 FILE3」を実行します。
タント

IIRCのxargsの一部のバージョンには、指定された制限までこれらの名前をまとめてバッチ処理するオプションがあります。このため、大きなリストがある場合でもオーバーフローを回避できます。
ケビンCantu

(検索自体は、それ自体が怖い小さな言語です!)
ケビンCantu

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