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 ...
. 但如果我现有的命令可以得到修复,那就太好了。
鉴于使用--null
,我\xe2\x80\x99m 假设你\xe2\x80\x99re 使用 GNU grep
。您可以使用( ) 选项告诉它将数据视为以 null 分隔,并使用-z
--null-data
-a
:
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
输出任意数据)。
--null
只影响\xe2\x80\x99s grep
\xe2\x80\x99s 文件名的输出,在这里没有影响。
正如您所提到的,您可以完全使用 GNU 来完成此操作find
,甚至无需使用-exec
,尽管您需要LC_ALL=C
能够找到其路径两侧都包含非文本的文件zip
(尽管不太可能/usr/lib
):
LC_ALL=C find /usr/lib -path \'*zip*\' -printf \'found file: %p\\n\'\n
Run Code Online (Sandbox Code Playgroud)\n