* nix:使用find命令执行嵌套-exec

时间:2014-04-08 17:40:53

标签: php linux grep find exec

我尝试执行以下操作:搜索所有777目录,然后在这些目录中搜索包含字符串" mail("。)的php文件。我的目标是使这个cron-job的一部分每晚运行,并找到所有包含邮件功能的php文件,这些邮件功能可能已秘密插入到我们的服务器上。所以,我已经写了这个命令:

find -type d -perm 777 -exec find {} -name "*.php" \; -exec grep "mail(" {} \;

哪个(应该):

1:找到具有777权限的文件夹

2:对于每个这样的文件夹,找到其中包含的所有php文件

3:对于每个这样的文件,执行一个grep来查找字符串" mail("

然而,它似乎并没有起作用。它正在做的是给我一个777特权目录中的php文件列表,但它没有执行grep。我看过一些像这样的帖子:

find -exec with multiple commands

这让我相信-exec的嵌套是可能的。我有什么明显的遗失吗?提前感谢您的时间!

2 个答案:

答案 0 :(得分:3)

您无法嵌套find -exec,但您可以嵌套sh,而find -exec依次调用{}。使用GNU find,您还必须重写内部查找中的find . -type d -perm 777 \ -exec sh -c 'find "$1" -name "*.php" -exec grep "mail(" {""} \;' _ {} \; ,以便外部查找不会替换它:

find . -type d -perm 777 \
  -exec find {} -name '*.php' -print0 \; | xargs -0 grep -H 'mail(' 

这是您问题的最直接答案。有多种简化方法:

grep

更简单的90%版本只会使用find . -type d -perm 777 -exec grep -HR 'mail(' \; | grep '\.php' 来递归:

{{1}}

答案 1 :(得分:0)

试试这个

find somewhere -type d -perm 777 -execdir grep mail *.php