マンページの状態を探す:
-exec command {} +
This variant of the -exec action runs the specified command on the selected files,
but the command line is built by appending each selected file name at the end;
the total number of invocations of the command will be
much less than the number of matched files.
find
いつもこれが一度だけ実行されると思いましたcommand
。コマンドが何回呼び出されたかを知る方法はありますか?
私の考えでは、これが一度だけ発生した場合は、処理command
するには大きすぎるパラメータのリストを作成する危険があるため、これは重要です。ただし、 find が呼び出しを分割すると (たとえばparallel
)、この状況は次のようになります。緩和される。
ベストアンサー1
使用されるバッファはfind
バージョンによって異なります。ここに提供したSuSEボックスのサイズは約256Kbのようです。
したがって、「コマンド」が呼び出された回数を計算するには、見つかった各ファイルパスの長さを知る必要があります。これは、(ほぼ)すべてのパス長の合計に区切りスペースに1を加え、コマンド自体を引いたものになります。バッファ領域サイズで割った値です。
たとえば、平均パス長が200バイトの20,000個のファイルを見つけました。これは、4,020,000バイトを256Kbで割った値が15.33であるため、約16回の呼び出しが必要です。
2回の連続呼び出しの間にファイルパスを破壊する必要がないことを考慮すると、正確な計算は少し複雑ですが、おおよその数値を得ることができます。
バラよりここ1スレッド(ソースコードを含む)の場合、サイズは32Kbと報告されており、不必要に低いと見なされます。find
はいシステム制限を使用してください。私は実験していません)coreutils
バージョンは次のように推論されます。128KBのものより4倍多いようです。。