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

我做错了什么?第二个命令应该至少返回与第一个命令相同的匹配文件,但我没有得到任何匹配。

答案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 {} + 

相关内容