非常に大きなファイルセットよりも効率的で、使用する必要があるのはどれですか?
find . -exec cmd {} +
また
find . | xargs cmd
(ファイル名に面白い文字がないと仮定します)
非常に大きなファイルセットよりも効率的で、使用する必要があるのはどれですか?
find . -exec cmd {} +
また
find . | xargs cmd
(ファイル名に面白い文字がないと仮定します)
速度の違いはわずかです。
ただし、次のことを確認する必要があります。
スクリプトは、ファイル名にスペースやタブなどが含まれていないことを想定していません。最初のバージョンは安全ですが、2 番目のバージョンはそうではありません。
あなたのスクリプトは、" " で始まるファイルを-
オプションとして扱いません。
したがって、コードは次のようになります。
find . -exec cmd -option1 -option2 -- {} +
また
find . -print0 | xargs -0 cmd -option1 -option2 --
最初のバージョンは 1 を無視できるので短くて書きやすいですが、" -exec cmd {} +
" は GNU findutils の比較的新しいオプションであるため、2 番目のバージョンはより移植性が高く安全です (2005 年以降、多くの実行中のシステムにはまだありません)。そして、最近バグがありました。-exec cmd {} +
また、他の回答からわかるように、多くの人がこの「 」を知りません。
find . | xargs cmd
より効率的です(一致ごとに1回実行されるとは異なり、実行cmd
回数は可能な限り少なくなります)。ただし、ファイル名にスペースやファンキーな文字が含まれていると、問題が発生します。exec
cmd
以下の使用をお勧めします。
find . -print0 | xargs -0 cmd
これは、ファイル名にファンキーな文字が含まれている場合でも機能します(NULで終了する一致-print0
を印刷し、この形式を期待します)。find
-0
xargs