使用Linux Find搜索包含具有属性的文件的目录

jm2pwxwz  于 2023-02-03  发布在  Linux
关注(0)|答案(2)|浏览(109)

我试图在一个巨大的目录中找到项目。项目总是有几个层次的深度,并有一个包含项目名称的配置文件。所以基本上...
给定一个路径和字符串,返回距离深度为3且包含名为“config”的文件的任何目录,该文件包含
我了解到find与grep结合使用也可以工作......但是输出grepped文本,而不是其父目录的路径
find <starting-dir> -maxdepth 3 -mindepth 3 -type d -exec grep '<project-name>' {}/config \;
只打印出项目名称:(
也许有什么方法可以切换回find的默认行为,即只在grep成功时才打印出找到的文件路径,或者我应该尝试使用其他工具来解决这个问题?

mbjcgjjk

mbjcgjjk1#

要获得-print,需要在成功的-exec之后显式添加它。
例如,使用grep的-q

find <starting-dir> \
    -maxdepth 3 -mindepth 3 \
    -type d \
    -exec grep -q '<project-name>' {}/config \; \
    -print

正如您所发现的,grep已经有了-l
您可以减少grep进程的数量:

find <starting-dir> \
    -maxdepth 4 -mindepth 4 \
    -type f -name config \
    -exec grep -l '<project-name>' {} +
8i9zcol2

8i9zcol22#

在我的输出中添加-l标志可以解决这个问题,出于某种原因,我以为这只会打印出“config”,而不是该配置文件的整个路径,但现在我们看到了。
find <starting-dir> -maxdepth 3 -mindepth 3 -type d -exec grep -l '<project-name>' {}/config \;
这将打印出您搜索的项目的配置文件的完整路径。

相关问题