2016-04-22 56 views
0

我正在寫一個在.php文件上執行grep的腳本,但我也希望它對.php文件包含的任何文件執行相同的grep。有沒有辦法在運行-exec之前導入參數列表來查找?

我使用PHP函數

get_included_files(); 

生成包含文件的列表(該列表將被保存到一個文件中),我想我找到對雙方.php文件執行的grep找到的所有文件以及我的文件列表中列出的所有文件。

我已經試過如下:

find -iname \*.php -exec grep 'foo' $(cat list.txt) {} + 

find -iname \*.php | xargs -I {} grep 'foo' $(cat list.txt) {} 

在這兩種情況下,我得到兩種:

在/ usr /斌/發現:參數列表過長

在/ usr/bin中/ xargs:參數列表太長

任何幫助,將不勝感激

+0

你就不能運行'grep'兩次? – gdlmx

回答

0

我想你可能是ab樂先構建加入列表,然後使用xargs將其提供給grep避免你的問題:

find -iname \*.php | cat list.txt - | xargs grep 'foo' 

注意,在cat的論據-指的是在這種情況下標準輸入,也就是文件的列表由find返回。

如果您想避免重複,也可以在其中插入sort -u

我想你的錯誤是list.txt本身的內容足以打破grep call; findxargs都會檢測到並拒絕啓動該命令,而不考慮其參數。

0

在您的命令中,首先將list.txt中的所有文件名傳遞給find/xargs作爲位置參數。在你的情況下,這個文件包含的名字多於OS的限制。

所以只需運行grep的每個名字LIST.TXT

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    grep 'foo' "$line" 
done < list.txt 
相關問題