速度の差はわずかです。
ただし、次のことを確認する必要があります:
<オール>スクリプトは、nofile にファイル名にスペース、タブなどがあると想定しません。最初のバージョンは安全ですが、2 番目のバージョンはそうではありません。
あなたのスクリプトは「-
」で始まるファイルを扱いません "オプションとして。
したがって、コードは次のようになります:
find . -exec cmd -option1 -option2 -- {} +
または
find . -print0 | xargs -0 cmd -option1 -option2 --
最初のバージョンは 1 を無視できるので短くて簡単に記述できますが、2 番目のバージョンは "-exec cmd {} +
" のように移植性が高く安全です " は GNU findutils の比較的新しいオプションであり (2005 年以降、多くの実行中のシステムにはまだありません)、最近はバグがありました。また、多くの人がこの "-exec cmd {} +
を知りません。 "、他の回答からわかるように。
find . | xargs cmd
より効率的です (cmd
を実行します) exec
とは異なり、可能な限り少ない回数 cmd
を実行する 試合ごとに1回)。ただし、ファイル名にスペースや変な文字が含まれていると問題が発生します。
以下を使用することをお勧めします:
find . -print0 | xargs -0 cmd
これは、ファイル名に奇妙な文字 (-print0
) が含まれていても機能します。 find
にします NUL で終了する一致を出力、-0
xargs
になります このフォーマットを期待してください。)
現代の xargs
のバージョンは、多くの場合、パイプラインの並列実行をサポートしています。
明らかに、find … -exec
の選択に関してはピボット ポイントになる可能性があります。 そして… | xargs