我想删除包含 string 的所有文本foo
。
我可以列出所有文件ack-grep foo
,但我找不到删除所有文件的方法,例如-exec rm {}
选项find
。
如何删除包含特定字符串的所有文件?
答案1
使用 GNU xargs
:
ack -l --print0 foo | xargs -r0 rm --
ack's--print0
和 xargs'-0
导致 ack 和 xargs 使用 NUL 作为分隔符进行写入和读取,这保证了正确的文件名处理。如果没有它,xargs
将接受更广泛的字符作为分隔符。
答案2
您可以将选项 -l 与 grep 和 ack 一起使用,它仅列出文件名:
grep -l --null foo ./* | xargs -r0 rm
或者:
ack -l --print0 foo ./* | xargs -r0 rm --