1. ホーム
  2. linux

[解決済み] 検索 -exec cmd {} + vs | xargs

2022-08-12 03:10:33

質問

非常に大きなファイルの集合に対して、どちらがより効率的で、どちらを使うべきでしょうか?

find . -exec cmd {} +

または

find . | xargs cmd

(ファイル名に変な文字が含まれていないものとします)

どのように解決するのですか?

速度差はほとんどありません。

しかし、あなたはそれを確認する必要があります。

  1. スクリプトは ファイル名にスペースやタブなどが含まれることはありません。 ファイル名にスペースやタブが含まれることはありません。 は安全で、2番目は安全ではありません。

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

ですから、あなたのコードは次のようになります。

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

または

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

最初のバージョンは1を無視できるので短く、書きやすいですが のように、2番目のバージョンはよりポータブルで安全です。 -exec cmd {} + はGNU findutilsの比較的新しいオプションで(2005年以降、多くの実行中のシステムにはまだありません)、以前は は最近バギー . また、多くの人がこの " を知りません。 -exec cmd {} + を知らない人も多いようです。