xargs grep忽略不符合查询的文件

Mea*_*ell 3 unix bash grep xargs

关于使用xargs执行grep的快速问题.当我这样做时,我将显示一堆结果,这些结果来自不存在的文件,其间插入成功匹配搜索条件的文件,例如:

find . | xargs grep 'Cache'

grep: PT: No such file or directory
grep: Sans: No such file or directory
grep: Free: No such file or directory
grep: Font: No such file or directory
grep: License.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

是否有一个可以传递的arg只能显示命中?

谢谢.

Mar*_*air 7

文件名包含空格,因此您需要告诉find输出由NUL字节而不是换行符分隔的结果 - 请尝试以下操作:

find . -print0 | xargs -0 egrep 'Cache'
Run Code Online (Sandbox Code Playgroud)

-0xargs说解释从STDIN该数据作为由NUL字节分开.(Cache这里不需要单引号.)

类Unix系统上的许多工具同样可以生成或使用由NUL字节分隔的数据,因为0x000x2F(正斜杠)是文件或目录名称中不允许的唯一两个字节 - 这是一种安全处理的常用方法文件名包含空格或换行符.

作为最后一点,要非常挑剔,您可能希望将其更改为:

xargs -0 egrep Cache /dev/null
Run Code Online (Sandbox Code Playgroud)

...所以你确定总会有多个参数,grep并且你得到的输出始终以文件名为前缀.