grep 的手册页显示
"grep -lZ outputs a zero byte after each file name instead of the usual newline"
但就我而言,输出中的某些文件仍然需要引号。为了使其发挥作用:
/usr/bin/grep -rlZ 'Not Found'|xargs -0 rm
-w
文件名中的the-webkit-stuff.html
不应被解释为 rm 的选项。所以我目前正在这样做:
/usr/bin/grep -rlZ 'Not Found'|\
xargs -0 -I{} find . -type f -name {} -print0 | xargs -0 rm
这效率不高。有没有一个 grep 版本有“更好的-print0
”?
你会怎么做?
答案1
你可以使用
/usr/bin/grep -rlZ 'Not Found' | xargs -0 -r rm --
其中--
阻止实用程序将任何内容解释为选项,或者,
/usr/bin/grep -rlZ 'Not Found' . | xargs -0 -r rm
这将导致grep
所有文件的路径名都带有前缀./
.选项-r
使xargs
xargs
不是如果没有收到输入grep
(即如果没有文件包含该字符串),则运行该命令。
我个人可能会使用find
:
find . -type f -exec grep -qF 'Not found' {} ';' -delete
(我认为它做了同样的事情:递归删除包含字符串的文件Not found
)