我试过这个:
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'