加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 21:09:31 所属栏目:安全 来源:网络整理
导读:我有一个问题的解决方案 find . -type d -exec sh -c 'test $(find "$0" -maxdepth 1 -type d | wc -l) -eq 1' {} ; -print 我想知道,是否有更好(更快)的方法来做到这一点.我真的不喜欢在’找到’另一个查找过程中开始. 解决方法 随着命令的更多编码也应该
我有一个问题的解决方案

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解决方案,如问题所示.

性能测试:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读