123

非常に大きなファイルセットよりも効率的で、使用する必要があるのはどれですか?

find . -exec cmd {} +

また

find . | xargs cmd

(ファイル名に面白い文字がないと仮定します)

4

3 に答える 3

114

速度の違いはわずかです。

ただし、次のことを確認する必要があります。

  1. スクリプトは、ファイル名にスペースやタブなどが含まれていないことを想定していません。最初のバージョンは安全ですが、2 番目のバージョンはそうではありません。

  2. あなたのスクリプトは、" " で始まるファイルを-オプションとして扱いません。

したがって、コードは次のようになります。

find . -exec cmd -option1 -option2 -- {} +

また

find . -print0 | xargs -0 cmd -option1 -option2 --

最初のバージョンは 1 を無視できるので短くて書きやすいですが、" -exec cmd {} +" は GNU findutils の比較的新しいオプションであるため、2 番目のバージョンはより移植性が高く安全です (2005 年以降、多くの実行中のシステムにはまだありません)。そして、最近バグがありました。-exec cmd {} +また、他の回答からわかるように、多くの人がこの「 」を知りません。

于 2009-05-22T09:22:36.657 に答える
9
find . | xargs cmd

より効率的です(一致ごとに1回実行されるとは異なり、実行cmd回数は可能な限り少なくなります)。ただし、ファイル名にスペースやファンキーな文字が含まれていると、問題が発生します。execcmd

以下の使用をお勧めします。

find . -print0 | xargs -0 cmd

これは、ファイル名にファンキーな文字が含まれている場合でも機能します(NULで終了する一致-print0を印刷し、この形式を期待します)。find-0xargs

于 2009-05-22T08:23:36.633 に答える