2016-04-22 57 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 
相关问题