GNU/Linux >> Linux の 問題 >  >> Linux

-exec コマンド {} + vs | を検索します。 xargs

速度の差はわずかです。

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

<オール>
  • スクリプトは、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


    Linux
    1. Recursive Grep Vs Find / -type F -exec Grep {};どちらがより効率的/高速ですか?

    2. Find -exec呼び出しでユーザー定義関数を実行しますか?

    3. Find To Workで-execオプションを取得しますか?

    1. -execが失敗した場合の検索から抜け出しますか?

    2. -execの文字列から不明な文字をエスケープしますか?

    3. 検索から文字列を返す{}を操作します-exec?

    1. パイプを含める方法 |私のLinuxのfind -execコマンドで?

    2. xargs でエイリアス化されたコマンドを使用するにはどうすればよいですか?

    3. find -exec でベース名とフル パスの両方を使用する