Bash - 如何查找和删除所有包含特定字符串的文件?

4
假设在给定目录中有许多具有不同文件扩展名或仅有文件名而没有扩展名的文件。其中一些文件包含字符串“\/for\/endetta”。
我该如何查找并删除与此模式匹配的所有文件?我可以使用以下命令来实现:
find -type f -exec egrep -Il '\/for\/endetta' {} \;|xargs rm -fv
  1. 但是不使用xargs能否实现呢?

  2. 如何正确转义\s和\/s等字符?


类似 find -type f -exec grep -q '\/for\/endetta' {} \; -delete 应该可以工作(因为 -exec 将采取其运行的命令的退出状态),但我现在没有时间检查它。将 -delete 替换为 -print 进行检查。 - Reinstate Monica Please
嗨,谢谢你的尝试。可惜它没有起作用。命令似乎执行了(没有抛出任何错误),但它没有删除任何具有指定字符串的文件。 - Sami88
2个回答

4

BrowSlow在评论中提供的答案是正确的,除了/for/endetta的转义。尝试使用以下命令:

find . -type f -exec grep -q '\\/for\\/endetta' {} \; -delete 

如果grep的退出状态为true,则执行以下操作。将-delete替换为-print,以查看将被删除的文件。

1
使用递归grep查找所有文件,然后删除它们。就像这样:
for file in $( fgrep -l -r '\/for\/endetta' ../ ); do rm "$file"; done

使用 fgrep 和单引号,您无需转义任何内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接