如何grep“find -print0”输出?

som*_*ega 0 linux shell grep find xargs

我试过这个:

find /usr/lib -print0 | grep zip | xargs -0 -I{} echo "found file: {}"
find /usr/lib -print0 | grep --null zip | xargs -0 -I{} echo "found file: {}"
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为 grep 只说有一个二进制文件匹配。我希望 grep 输出以空字符结尾的行。

是否可以在不更改整个命令的情况下解决此问题?我知道可以使用find -name ... -exec .... 但如果我现有的命令可以得到修复,那就太好了。

Ste*_*itt 6

鉴于使用--null,我\xe2\x80\x99m 假设你\xe2\x80\x99re 使用 GNU grep您可以使用( ) 选项告诉它将数据视为以 null 分隔,并使用-z--null-data-a

\n
find /usr/lib -print0 |\n  grep -a -z zip |\n  xargs -r0 printf \'found file: %s\\n\'\n
Run Code Online (Sandbox Code Playgroud)\n

(请记住,您不能用于echo输出任意数据)。

\n

--null只影响\xe2\x80\x99s grep\xe2\x80\x99s 文件名的输出,在这里没有影响。

\n

正如您所提到的,您可以完全使用 GNU 来完成此操作find,甚至无需使用-exec,尽管您需要LC_ALL=C能够找到其路径两侧都包含非文本的文件zip(尽管不太可能/usr/lib):

\n
LC_ALL=C find /usr/lib -path \'*zip*\' -printf \'found file: %p\\n\'\n
Run Code Online (Sandbox Code Playgroud)\n