
これは速いですか?
find /tmp -name core -type f | xargs /bin/rm -f
以下を行います。
find /tmp -name core -type f -exec /bin/rm -f {} \;
もしそうなら、それを使用するとxargs
全体の速度が向上しますか?
(マンページから例を取得しましたxargs
。)
答え1
Mattがすでに述べたように、一般的に次のことを知る必要があります。すべてNUL
byte(文字列の末尾を区切るため)とthe /
(パス要素を区切るため)以外の文字がファイル名に表示されることがあります。したがって、あなたのxargs
例は(GNUシステムで)
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
これに相当するのは-exec
find+
だが\;
。
find /tmp -name core -type f -exec /bin/rm -f {} +
このバージョンでは、各ファイルを呼び出さずに、以前の/bin/rm
ようにパラメータをバンドルしますxargs
。
答え2
最初のバージョンはおそらく2番目のバージョンよりも速いでしょう。xargs
複数のファイルを一度に渡しますrm
が、find
各ファイルに対して一度呼び出します。rm
したがって、最初のバージョンでは、ブランチ/実行コールを減らすことができます。
(一致項目が1つしかないか、まったく一致しない場合は、2番目のバージョンがより速くなる可能性があります。自分で行う必要はありません。xargs
)
しかし、これが一つを選ぶ良い基準ではないと思います。この特定のケースでは、奇妙なファイル名を心配する必要はありませんが、一般的に心配する必要があります。 2番目のバージョンはより安全なので、一般的に使用することをお勧めします。