一直在寻找一下,找不到这个解决方案。我想我正在寻找一个名字的叶子目录。在这个例子中,我想得到一个目录列表,呼叫' 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的每个子目录的计数并随之退出。没有这样的爱。
答案 0 :(得分:1)
这假设为GNU find
。查找仅包含一次“模块”的所有叶子目录:
find -regex '.*/modules\(/.*\|$\)' \! -regex '.*/modules/.*/modules\(/.*\|$\)' -type d -links 2
答案 1 :(得分: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}}}'
试试这个吗?
答案 2 :(得分: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
设置退出状态(不幸的是,发现不会这样做)-print
打印找到的目录