速度の差はわずかです。
ただし、次のことを確認する必要があります:
<オール>スクリプトは、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