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

时间:2014-08-26 18:38:43

标签: design-patterns grep find xargs

假设在给定目录中有许多文件具有各种文件扩展名或根本没有扩展名,只有文件名。其中一些文件包含字符串“ \/for\/endetta ”。

如何查找和删除该模式中匹配此模式的所有文件?我可以通过使用:

来做到这一点
find -type f -exec egrep -Il '\/for\/endetta' {} \;|xargs rm -fv
  1. 但是没有xargs可以做到吗?

  2. 我如何正确地逃避\ s和/ s等

2 个答案:

答案 0 :(得分:1)

BrowSlow的答案(在评论中)是正确的,除了/ for / endetta的逃脱。 试试这个命令:

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

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

答案 1 :(得分:0)

使用递归grep查找所有文件,然后删除它们。像那样:

for file in $( fgrep -l -r '\/for\/endetta' ../ ); do rm "$file"; done

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