find -exec コマンドの使用 {} + コマンドの呼び出し回数

find -exec コマンドの使用 {} + コマンドの呼び出し回数

マンページの状態を探す:

   -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倍多いようです。

おすすめ記事