1

我定期为客户清理被黑的 Wordpress 安装,并且我编写了一组脚本来帮助我追踪网站被黑的位置。我经常使用的一个代码片段在 Ubuntu 上运行良好,但自从周五切换到 Fedora 后,它的表现完全符合预期。命令是这样的:

grep -Iri --exclude "*.js" "eval\s*(" * | grep -rivf ~/safeevals.txt >../foundevals.txt;

它应该发生的事情(并且在我使用 Ubuntu 时确实发生了): grep 遍历所有非二进制文件,不包括 Javascript 包括,对于 eval() 函数的所有出现,然后逐行执行否定匹配针对所有已知的 eval() 函数在 Wordpress 的香草安装中的出现(其模式在 ~/safeevals.txt 中)。

实际发生的情况:第一部分工作正常,因为我单独运行它,它确实在安装中找到了 eval() 的所有实例。但是,不是通过这些结果进行搜索,而是在管道之后重新搜索所有文件,返回 ~/safeevals.txt 的否定匹配(即安装中每个文件的几乎每一行)。

知道为什么第二个 grep 不对管道数据起作用,或者我需要做什么来修复它?谢谢。

-迈克尔

4

1 回答 1

3

刚刚在我的 Debian 机器上测试过:显然,grep -r喜欢假设默认参数为.. 我真的想知道这种行为是否有效。无论如何,我想-r从第二个grep命令中删除该选项将修复它。

编辑: rgrep 默认为 $PWD 似乎是 grep 的最新更改,请参阅有关 unix.stackexchange 的讨论以及上游 grep 代码存储库中提交的链接。

于 2013-11-05T22:48:20.780 回答