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

UNIX环境下如何使用ls -d */命令仅列出目录排除文件

UNIX环境下仅列出当前目录所有文件夹的方法

问题原因排查

正常情况下ls -d */本应仅匹配末尾带/的目录条目,如果你执行后仍返回普通文件,通常是两种原因导致:

  • 当前目录存在名称以/结尾的非常规普通文件
  • ls命令被设置了带额外参数的别名(比如默认加了-a/-A等参数),可执行alias ls检查是否有别名配置,存在的话可以加\前缀调用原生ls,比如\ls -d */

可用解决方案

方案1:基于ls命令调整(适配大部分常规场景)

添加参数避免别名干扰,同时过滤非目录条目:

\ls -d -- */ | grep '/$'

参数说明:

  • \ls:调用原生ls命令,跳过别名配置
  • --:防止有名称以-开头的目录被识别为命令参数
  • grep '/$':强制仅保留末尾带/的目录条目,过滤普通文件

方案2:find命令实现(全POSIX环境兼容,最稳妥)

仅列出当前一级目录下的文件夹,不递归扫描子目录:

# 输出带./前缀的目录路径
find . -maxdepth 1 -type d ! -name '.'

# 输出不带前缀的纯目录名
find . -maxdepth 1 -type d ! -name '.' -exec basename {} \;

参数说明:

  • -maxdepth 1:限制仅扫描当前目录,不向下递归
  • -type d:仅匹配目录类型的文件
  • ! -name '.':排除当前目录本身的输出

方案3:shell内置循环实现(无需调用外部命令,效率最高)

通过内置判断过滤非目录条目,适配所有shell环境:

for d in */; do [ -d "$d" ] && echo "${d%/}"; done

说明:[ -d "$d" ]强制校验条目是否为真实目录,${d%/}用于删除目录名末尾的/符号,不需要删除的话直接替换为echo "$d"即可。

内容的提问来源于stack exchange,提问作者StickyRoll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:03