我运行以下代码来删除恶意软件,我想用管道扩展它,这样就可以删除发现包含下面字符串的文件(删除grep返回的结果)。
grep -rnw . -e "ALREADY_RUN_1bc29b36f342a82aaf6658785356718"
返回文件列表
./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'))
答案 0 :(得分:1)
这是使用xargs
来处理从stdin列出的文件的解决方案。
Grep递归搜索.
的内容以查找模式(您似乎没有使用任何正则表达式功能,因此我将标志更改为-F
以获取固定字符串)。
这是一个删除文件的简单脚本,请注意它将在所有换行符上拆分,包括文件名中的换行符。
$ grep -rl -F "ALREADY_RUN_1bc29b36f342a82aaf6658785356718" . | \
xargs -I'{}' rm '{}'
为了完整起见,这里的命令无论文件名如何都可以使用(使用rm
是安全的,因为我们知道路径必须以./
开头)
$ 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' '{}' +