Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在子文件夹中搜索文件中的字符串,并删除匹配文件的父文件夹_Linux_Search_Find_Xargs - Fatal编程技术网

Linux 在子文件夹中搜索文件中的字符串,并删除匹配文件的父文件夹

Linux 在子文件夹中搜索文件中的字符串,并删除匹配文件的父文件夹,linux,search,find,xargs,Linux,Search,Find,Xargs,我已经找了很长时间了,但还没有找到解决办法。我有以下文件夹结构: /root/website1/file1.asp /root/website2/file2.txt 我想在/root/(可以是多个级别)下的所有文件夹中搜索不超过180天且文件中包含特定字符串的文件。如果文件包含字符串,则应删除其父文件夹(以及文件本身)。如果file2.txt包含该字符串,则应删除/root/website2 我已经完成了这一步,但是我一直在将dirname{}传递给文件夹上的“rm-rf”命令 找到-名称'*a

我已经找了很长时间了,但还没有找到解决办法。我有以下文件夹结构:

/root/website1/file1.asp
/root/website2/file2.txt

我想在/root/(可以是多个级别)下的所有文件夹中搜索不超过180天且文件中包含特定字符串的文件。如果文件包含字符串,则应删除其父文件夹(以及文件本身)。如果file2.txt包含该字符串,则应删除/root/website2

我已经完成了这一步,但是我一直在将dirname{}传递给文件夹上的“rm-rf”命令

找到-名称'*asp'-mtime-180 | xargs grep-l'string'| xargs-I{}dirname{}rm-rf

此外,如果搜索在找到包含字符串的第一个文件后移动到下一个文件夹,而不是在同一个文件夹中继续搜索,这将是理想的。(即只返回并删除唯一的文件夹,因为一个文件夹中可能有许多匹配的文件)。最后,如果我可以遍历输入文件中的字符串列表来搜索,那就太好了

本质上,我正在清理web服务器上大量的注入文件


非常感谢

您希望执行以下操作:

find . -name "*.txt" -exec grep -q deleteme {} \; -exec dirname {} \; | sort -u | xargs rm -rf

在上面的命令中,find有三个表达式:
-name“*.asp”
-exec grep-q string{}
-exec dirname{}。默认情况下,“查找”假定这三个表达式由
-和
运算符连接。Find将从左到右计算表达式,直到知道结果。因此,如果文件名与*.asp不匹配,则不会运行第二个表达式(因为false和anythis都是false…)。如果
grep-q字符串{}不返回0,它不会运行第三个表达式。第三个表达式打印通过前两个表达式的任何内容的名称。然后将其导入
sort-u
以删除重复项,并将
xarg
导入
rm-rf

此命令不起作用。但是,如果文件父目录包含specefic文本,我可以使用这个命令find-typef-execgrep-l“text”{}打印它-printf“%h\n”