我试图找出哪些文件中使用了一些特定的标识符。我知道文件的名称并知道标识符,因此我使用以下命令来实现我想要的结果:
find ./ -name "configuration.php" -print | xargs cat | grep db_userXYZ
唯一的问题是,我丢失了文件名。我看到它db_userXYZ
正在某处使用,但是上面的命令没有告诉我在哪个文件中。输出将类似于:
$this->db_user = 'db_userXYZ';
$this->db_name = 'db_XYZ';
有什么建议么?
答案1
尝试:
find ./ -name "configuration.php" -exec grep db_userXYZ /dev/null {} +
POSIX 定义寻找 -exec utility_name [argument ...] {} +
:
如果主表达式用加号标点,则主表达式应始终评估为 true,并且评估主表达式的路径名应聚合到集合中。对于每组聚合路径名,应调用一次实用程序 utility_name。每次调用应在集合中的最后一个路径名聚合之后开始,并应在 find 实用程序退出之前以及为此主聚合下一个集合中的第一个路径名(如果有)之前完成,但未指定调用是否发生在其他初选评估之前、期间或之后。如果任何调用返回非零值作为退出状态,则 find 实用程序应返回非零退出状态。仅包含两个字符“{}”的参数应替换为聚合路径名集,每个路径名按照聚合顺序作为单独的参数传递给调用的实用程序。任何两个或多个路径名集合的大小均应受到限制,以便实用程序的执行不会导致超出系统的 {ARG_MAX} 限制。如果存在多个仅包含两个字符“{}”的参数,则行为未指定。
如果您的grep
支持-H
选项(-H
不是由POSIX grep), 您可以使用:
find ./ -name "configuration.php" -exec grep -H db_userXYZ {} +