find -print0 | xargs -0 grep が Ubuntu 10.04 で期待どおりに動作しない

find -print0 | xargs -0 grep が Ubuntu 10.04 で期待どおりに動作しない

ちょっと変な問題があります。

実行した場合:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' | xargs grep -i users

スペースを含むファイル名に対して大量のエラーが発生しますが、一致するファイルもあります。

ただし、スペースを含むファイル名が正しく処理されるように次のようにすると、一致するものは返されません。

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' -print0 | xargs -0 grep -i users

何が間違っているのでしょうか? 2 番目のコマンドは、少なくとも最初のコマンドと同じ一致するファイルを返すはずですが、一致するものがありません。

答え1

答えは次のとおりです。

find . \( -iname '*.php' -o -iname '*.pl' -o -iname '*.html' \) -print0 | xargs -r0 grep -i users

これは使えます。以前は見たことがなかったのですが、同僚から教えてもらいました。

答え2

print0 と xargs は必要ありません。この機能はすでに find に組み込まれています。

find . -iname "*.php" -o -iname "*.pl" -o -iname "*.html" -exec grep -i users {} + 

関連情報