如何获取类似子文件夹中文件的“grep -isrl”类似结果?

如何获取类似子文件夹中文件的“grep -isrl”类似结果?

我正在使用某个框架,该框架的模块具有一致的文件夹命名约定。我想foo从高级目录中检索包含部分字符串的所有文件,但我只想要路径包含名为 的目录的文件的结果Bar。详细说明:从项目的根目录开始,通常有四级子文件夹,包含任意数量的子文件夹和文本文件(全部为 .php)。我想要搜索的子目录/我想要结果的子目录都包含名为 的父文件夹Bar

就我有限的经验来说:我想要一个这样的命令,grep -isrl 'foo' ./并且只接收这样的结果

./A/B/C/Bar/D/F/Some.php
./G/H/I/Bar/Some.php

并排除

./A/B/C/Baz/D/F/Some.php
./G/H/I/Baz/Some.php

本质上,我假设存在类似的grep -isrl 'foo' ./*/Bar/*.php地方*将匹配零对多子目录。

答案1

单程:

find <search path> -type d -name 'Bar' -exec grep -r foo {} +

(没有 GNU find,请+用替换\;)。

这种方式会首先找到命名的目录Bar,然后仅在这些目录中递归地进行 grep。

要将搜索限制为 PHP 文件:

find <search path> -type d -name 'Bar' -exec grep -r --include '*.php' foo {} +

它也可以通过 shell 通配符来完成,但这取决于您使用的 shell(显然)。

编辑:添加 Bash 示例:

shopt -s globstar
grep -r test <search path>/**/Bar/

相关内容