xargsの他の-nフラグ値がfindコマンドで使用されている場合、違いはありますか?

xargsの他の-nフラグ値がfindコマンドで使用されている場合、違いはありますか?

誰かが find コマンドを使用して特定の基準に一致するファイルを検索し、結果を rm コマンドにパイプすると仮定します。

find / -type f -name "*.jpg" | xargs rm 

まず、rmなどのコマンドが受け入れることができる引数の数に制限があるように見えるため、見つかったファイルの数が多いと、上記のコマンドがエラーを引き起こすかどうかはわかりません。

その後、一度にrmにパラメータとして渡すファイルの数を設定できることがわかります。たとえば、-n3を使用するXargsは、rm実行コマンドに3つの引数を渡し、すべてのファイルが引数として渡されるまでこれを繰り返します。

今、xargsの-nオプションに異なる値を使用しますか?これらのコマンドラインは実行期間などどのような点で異なりますか?

find / -type f -name "*.jpg" | xargs rm 

find / -type f -name "*.jpg" | xargs -n1 rm 

find / -type f -name "*.jpg" | xargs -n2 rm 

find / -type f -name "*.jpg" | xargs -n3 rm

.
.
.

find / -type f -name "*.jpg" | xargs -n999 rm  

答え1

前述の制限は、通常、exec単一のコマンドに限定されず、使用されるバッファに関連しています。目的xargsは正確にこの問題を解決することです。xargsコマンドにはできるだけ多くのパラメーターがあります。これにより、コマンド呼び出しが最小化され、パフォーマンスが向上します。これに関して、コマンドの引数の数を明示的に指定して減らしても-n利点はありません。-nコマンドに特定の数の引数が必要な場合は、各引数に対してコマンドを一度呼び出すことができる特別なケースを使用できます。 (同様の動作を容易にするためのfindオプション-execと特殊ターミネータもあります。)+

答え2

同様の質問をしたので、md5sumを再帰的に呼び出すと違いが発生します。

time find -type f -print0 | ...
... xargs -0 --max-procs 0 md5sum  37,98s user 2,45s system 99% cpu 40,464 total
... xargs -0 -n100 --max-procs 0 md5sum  41,18s user 2,66s system 327% cpu 13,374 total
... xargs -0 -n10 --max-procs 0 md5sum  45,20s user 2,93s system 573% cpu 8,396 total
... xargs -0 -n1 --max-procs 0 md5sum  45,90s user 3,01s system 591% cpu 8,263 total

find -type f -exec md5sum {} \;  37,87s user 2,62s system 99% cpu 40,596 total

ご覧のとおり、-nパラメータは私にわずかな速度向上を提供した唯一のものです。

関連情報