欢迎光临
我们一直在努力

bash – 列出所有不包含子目录的目录

本站教程收集整理的这篇文章主要介绍了bash – 列出所有不包含子目录的目录,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个问题的解决方案

find . -type d -exec sh -c 'test $(find "$0" -maxdepth 1 -type d | wc -l) -eq 1' {} \; -print

我想知道,是否有更好(更快)的方法来做到这一点.我真的不喜欢在’找到’另一个查找过程中开始.

解决方法

随着命令的更多编码也应该工作:

find . -type d|awk 'NR>1{a[c++]=$0; t=t $0 SUBSEP} END{for (i in a) {if (index(t,a[i] "/") > 0) delete a[i]} for (i in a) print a[i]}'

使其更具可读性:

find . -type d | awk 'NR > 1 {
   a[c++]=$0;
   t=t $0 SUBSEP
}
END {
   for (i in a) {
      if (index(t,a[i] "/") > 0)
         delete a[i]}
   for (i in a)
      print a[i]
}'

虽然在这个解决方案中可能看起来更像编码,但在一个大目录中,这个基于awk的命令应该比嵌入式查找运行得快得多wc解决方案,如问题所示.

性能测试:

我在一个@R_249_11262@5k嵌套子目录的目录上运行它,发现这个awk命令比OP的查找快得多(快250-300%) wc命令.

美国高防vps

本站总结

以上是本站教程为你收集整理的bash – 列出所有不包含子目录的目录全部内容,希望文章能够帮你解决bash – 列出所有不包含子目录的目录所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。