我试过这个:
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 ...
. 但是,如果我现有的命令可以被修复,那就太好了。
鉴于使用
--null
,我假设您使用的是 GNUgrep
。您可以告诉它使用( ) 选项将数据视为以 null 分隔的数据,并使用以下选项将所有内容视为文本:-z
--null-data
-a
(记住你不能用来
echo
输出任意数据)。--null
只影响grep
文件名的输出,这里没有影响。正如您所提到的,您可以完全使用 GNU 来完成此操作
find
,甚至无需使用-exec
,尽管您需要LC_ALL=C
能够找到其路径在两边都有非文本的文件zip
(/usr/lib
虽然不太可能):