Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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 Grep和delete文件_Linux_Grep_Find - Fatal编程技术网

Linux Grep和delete文件

Linux Grep和delete文件,linux,grep,find,Linux,Grep,Find,我运行以下代码来删除恶意软件,我想用一个管道来扩展它,这样它就可以删除包含下面字符串的文件(删除grep返回的结果) 它返回一个文件列表 ./gallery.php:2:if (!defined('ALREADY_RUN_1bc29b36f342a82aaf6658785356718')) ./gallery.php:4:define('ALREADY_RUN_1bc29b36f342a82aaf6658785356718', 1); ./wp-includes/SimplePie/HTTP/d

我运行以下代码来删除恶意软件,我想用一个管道来扩展它,这样它就可以删除包含下面字符串的文件(删除grep返回的结果)

它返回一个文件列表

./gallery.php:2:if (!defined('ALREADY_RUN_1bc29b36f342a82aaf6658785356718'))
./gallery.php:4:define('ALREADY_RUN_1bc29b36f342a82aaf6658785356718', 1);
./wp-includes/SimplePie/HTTP/db.php:2:if (!defined('ALREADY_RUN_1bc29b36f342a82aaf6658785356718'))
./wp-includes/SimplePie/HTTP/db.php:4:define('ALREADY_RUN_1bc29b36f342a82aaf6658785356718', 1);
./wp-includes/SimplePie/Parse/template.php:2:if (!defined('ALREADY_RUN_1bc29b36f342a82aaf6658785356718'))
./wp-includes/SimplePie/Parse/template.php:4:define('ALREADY_RUN_1bc29b36f342a82aaf6658785356718', 1);
./wp-includes/SimplePie/XML/file.php:2:if (!defined('ALREADY_RUN_1bc29b36f342a82aaf6658785356718'))

下面是一个使用
xargs
处理stdin中列出的文件的解决方案

Grep递归地在
的内容中搜索模式(您似乎没有使用任何正则表达式功能,因此我将fixedstring的标志改为
-F

下面是一个简单的脚本,它将删除文件,请注意,它将在所有换行符上拆分,包括文件名中的换行符

$ grep -rl -F "ALREADY_RUN_1bc29b36f342a82aaf6658785356718" . | \
    xargs -I'{}' rm '{}'
为了完整起见,这里有一个不管文件名如何都可以使用的命令(使用
rm
是安全的,因为我们知道路径必须以
/
开头)

以及一次删除多个文件

$ find . -type f -exec \
    /bin/sh -c 'grep -q -F "$0" "$@" && rm "$@"' 'ALREADY_RUN_1bc29b36f342a82aaf6658785356718' '{}' +

尝试使用
-l
选项
grep
仅列出文件名。@GregoryNisbet如果使用-l,如何使用rm-rf执行它
$ find . -type f -exec \
    /bin/sh -c 'grep -q -F "$0" "$1" && rm "$1"' 'ALREADY_RUN_1bc29b36f342a82aaf6658785356718' '{}' \;
$ find . -type f -exec \
    /bin/sh -c 'grep -q -F "$0" "$@" && rm "$@"' 'ALREADY_RUN_1bc29b36f342a82aaf6658785356718' '{}' +