在“ack-grep”中是否有“find”的“-exec”之类的选项?

在“ack-grep”中是否有“find”的“-exec”之类的选项?

我想删除包含 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 --

相关内容