我试图在一个巨大的目录中找到项目。项目总是有几个层次的深度,并有一个包含项目名称的配置文件。所以基本上...
给定一个路径和字符串,返回距离深度为3且包含名为“config”的文件的任何目录,该文件包含
我了解到find与grep结合使用也可以工作......但是输出grepped文本,而不是其父目录的路径find <starting-dir> -maxdepth 3 -mindepth 3 -type d -exec grep '<project-name>' {}/config \;
只打印出项目名称:(
也许有什么方法可以切换回find的默认行为,即只在grep成功时才打印出找到的文件路径,或者我应该尝试使用其他工具来解决这个问题?
2条答案
按热度按时间mbjcgjjk1#
要获得
-print
,需要在成功的-exec
之后显式添加它。例如,使用grep的
-q
:正如您所发现的,grep已经有了
-l
。您可以减少
grep
进程的数量:8i9zcol22#
在我的输出中添加-l标志可以解决这个问题,出于某种原因,我以为这只会打印出“config”,而不是该配置文件的整个路径,但现在我们看到了。
find <starting-dir> -maxdepth 3 -mindepth 3 -type d -exec grep -l '<project-name>' {}/config \;
这将打印出您搜索的项目的配置文件的完整路径。