【问题标题】:Grep and delete filegrep 和删除文件
【发布时间】:2017-03-13 02:55:08
【问题描述】:

我运行以下代码来删除恶意软件,我想用管道对其进行扩展,以便它可以删除发现包含以下字符串的文件(删除结果由 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'))

【问题讨论】:

  • 尝试使用-l 选项到grep 仅列出文件名。
  • @GregoryNisbet 如果我使用 -l,我如何使用 rm -rf 执行它

标签: linux grep find


【解决方案1】:

这是一个使用xargs 处理从标准输入中列出的文件的解决方案。

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' '{}' +

【讨论】:

    猜你喜欢
    • 2014-01-18
    • 2011-04-21
    • 2016-02-02
    • 2021-05-10
    • 2018-08-25
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多