You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用find命令仅列出指定目录下的最底层子目录?

如何用find命令仅列出指定目录下的最底层子目录?

没问题,这个需求很常见——要找出那些没有子目录的“叶子”目录(不管里面有没有文件)对吧?其实用find就能轻松实现,给你几个实用的方案:

方法一:直观的shell脚本检查法

这个方法逻辑最容易理解:遍历每个找到的目录,检查它下面是否存在直接子目录,要是没有就输出路径:

find "/home/user/Documents" -type d -exec bash -c '
  # 只查找当前目录的直接子目录,不递归
  if [[ -z $(find "$1" -mindepth 1 -maxdepth 1 -type d) ]]; then
    echo "$1"
  fi
' _ {} \;

小细节解释:

  • -mindepth 1 -maxdepth 1 确保只看当前目录的一级子目录,避免没必要的递归
  • -z 判断子目录列表是否为空,空就说明这是个叶子目录

方法二:更高效的原生参数写法

如果你的目录结构特别复杂,上面的方法因为多次调用find可能有点慢,试试这个用find原生特性优化的写法:

find "/home/user/Documents" -type d -exec sh -c '
  # 用ls直接匹配子目录,错误信息丢去/dev/null避免干扰
  [ -z "$(ls -d "$1"/*/ 2>/dev/null)" ] && echo "$1"
' _ {} \;

这里ls -d "$1"/*/会专门列出当前目录下的所有子目录,2>/dev/null用来屏蔽“没有匹配项”的报错,结果为空就输出目录路径,速度会快不少。

额外提示

要是你想排除掉完全空的目录(既没子目录也没文件),可以在条件里再加个判断:

find "/home/user/Documents" -type d -exec bash -c '
  if [[ -z $(find "$1" -mindepth 1 -maxdepth 1 -type d) && -n $(ls -A "$1") ]]; then
    echo "$1"
  fi
' _ {} \;

-n $(ls -A "$1")用来确保目录里至少有文件存在。

备注:内容来源于stack exchange,提问作者Eduardo Perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:14:30