2014-04-08 75 views
3

我正在嘗試做以下事情:搜索所有777個目錄,然後在這些目錄中搜索那些包含字符串「mail(」)的php文件。 。就是讓這些每天晚上運行,並找到所有包含可能已暗中插入到我們的服務器的郵件功能的PHP文件的一個cron作業的這部分因此,我寫了下面的命令:* nix:使用find命令執行嵌套-exec

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

這(被認爲):

1:找到文件夾與777個權限

含有對於每個這樣的文件夾中,找到所有PHP文件在其中

3::210

2對於每個這樣的文件,則執行grep來查找字符串「電子郵件(」

然而,它不顯示爲加工。它正在做的是給我一個777特權目錄中的php文件列表,但它不執行grep。我看過一些這樣的貼子SO:

find -exec with multiple commands

這使我相信的-exec是可能的嵌套。有什麼明顯的我失蹤了?在此先感謝您的時間!

回答

1

不能嵌套find -exec,但你可以嵌套sh這反過來要求find -exec。隨着GNU找到,你也不得不重新改寫{}在內部發現,使得外發現將不會取代它:

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(' 

而且更簡單的90%的版本將只使用grep遞歸:

find . -type d -perm 777 -exec grep -HR 'mail(' \; | grep '\.php' 
0

試試這個

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