Bash 查找不包含特定目录的目录
一直在四处搜索,但找不到解决此问题的方法。我想我正在按名称查找叶目录。在本例中,我希望得到一个名为“modules”的目录列表,这些目录没有名为module的子目录Bash 查找不包含特定目录的目录,bash,shell,command-line,find,Bash,Shell,Command Line,Find,一直在四处搜索,但找不到解决此问题的方法。我想我正在按名称查找叶目录。在本例中,我希望得到一个名为“modules”的目录列表,这些目录没有名为module的子目录 modules/package1/modules/spackage1 modules/package1/modules/spackage2 modules/package1/modules/spackage3/modules modules/package1/modules/spackage3/modules/spackage1 m
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的子目录的数量,并随它一起退出。没有这样的爱
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}}}'
试试这个
试试这个?这假设GNU
find
。查找仅包含一次“模块”的所有叶目录:
这假设GNU
find
。查找仅包含一次“模块”的所有叶目录:
你的开始
find . -name modules \! -exec sh -c 'find -name modules' \;
还不错,只是需要一些改进
find . -name modules \! -exec sh -c 'find {} -mindepth 1 -name modules|read' \; -print
在找到的模块目录中搜索,而不是再次在顶部目录中搜索{}
只在已找到的模块目录下搜索,而不是再次找到自己-mindepth 1
,如果找不到文件,则设置退出状态(遗憾的是,find无法执行此操作)|读取
打印找到的目录-print
- 你的开始
find . -name modules \! -exec sh -c 'find -name modules' \;
还不错,只是需要一些改进
find . -name modules \! -exec sh -c 'find {} -mindepth 1 -name modules|read' \; -print
在找到的模块目录中搜索,而不是再次在顶部目录中搜索{}
只在已找到的模块目录下搜索,而不是再次找到自己-mindepth 1
,如果找不到文件,则设置退出状态(遗憾的是,find无法执行此操作)|读取
打印找到的目录-print
modules/package1/modules/spackage1/modules/
不是您在示例结构中指定的目录。谢谢。有趣的是,我刚刚注意到find-名称模块-exec sh-c“退出0”\代码>不返回任何结果。根据手册页,我猜退出0将使其与-exec语句不存在时相同。您能否澄清您的示例所需列表,因为modules/package1/modules/spackage1/modules/
不是您在示例结构中指定的目录。谢谢。有趣的是,我刚刚注意到find-名称模块-exec sh-c“退出0”\代码>不返回任何结果。根据manpage,我猜退出0将使其与-exec语句不存在时相同。