ちょっと変な問題があります。
実行した場合:
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 {} +