1

一直在寻找,找不到解决方案。我想我正在按名称寻找叶目录。在此示例中,我想获取一个名为“modules”的目录列表,这些目录没有名为 module 的子目录。

modules/package1/modules/spackage1
modules/package1/modules/spackage2
modules/package1/modules/spackage3/modules
modules/package1/modules/spackage3/modules/spackage1
modules/package2/modules/

我想要的清单将包含

modules/package1/modules/spackage3/modules/
modules/package2/modules/

没有名为 module 的子目录的所有名为 module 的目录

我开始尝试这个没有运气的东西

find . -name modules \! -exec sh -c 'find -name modules' \;

-exec 适用于退出代码,好的,让我们将计数作为退出代码传递

find . -name modules -exec sh -c 'exit $(find {} -name modules|grep -n ""|tail -n1|cut -d: -f1)' \;

这应该计算每个名为 modules 的子目录的数量并退出。没有这样的爱。

4

3 回答 3

1

这假设 GNU find。查找仅包含一次“模块”的所有叶目录:

find -regex '.*/modules\(/.*\|$\)' \! -regex '.*/modules/.*/modules\(/.*\|$\)' -type d -links 2
于 2012-06-12T10:38:28.067 回答
0
find . -name modules |\
awk '{gooddir[$1]=1}\
 END {\
    for(i in gooddir){\
        for(j in gooddir){\
            if(i!=j&&substr(i,0,length(j))==i)\
            {gooddir[i]=0;break}\
        }\
    }\
    for(i in gooddir){if(gooddir[i]==1){print i}}}'

尝试这个?

于 2012-06-12T08:32:29.347 回答
0

你的开始

find . -name modules \! -exec sh -c 'find -name modules' \;

还不错,只是需要一些改进。

find . -name modules \! -exec sh -c 'find {} -mindepth 1 -name modules|read' \; -print
  • {}在找到的模块目录中搜索,而不是再次在顶级目录中搜索
  • -mindepth 1仅在找到的模块目录下搜索,而不是再次找到自己
  • |read如果没有找到文件,则设置退出状态(不幸的是,find 不这样做)
  • -print打印找到的目录
于 2014-03-28T10:00:04.947 回答