我遇到了一个有点奇怪的问题。
如果我运行:
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
我做错了什么?第二个命令应该至少返回与第一个命令相同的匹配文件,但我没有得到任何匹配。
答案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 {} +