我尝试执行以下操作:搜索所有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的嵌套是可能的。我有什么明显的遗失吗?提前感谢您的时间!
答案 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