如何grep“find -print0”输出?

如何grep“find -print0”输出?

我试过这个:

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: {}"

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

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

答案1

鉴于 的使用--null,我假设您正在使用 GNU grep。你可以告诉它考虑数据以空值分隔-z( --null-data) 选项,并使用以下选项将所有内容视为文本-a

find /usr/lib -print0 |
  grep -a -z zip |
  xargs -r0 printf 'found file: %s\n'

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

--null只影响grep文件名的输出,并且在这里没有效果。

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

LC_ALL=C find /usr/lib -path '*zip*' -printf 'found file: %p\n'

相关内容