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

macOS zsh下使用ls命令隐藏大写开头目录的正确语法

适配需求的zsh命令
ls -dF *~[A-Z]*(/)

之前命令不生效的具体原因

  • 写*~[A-Z]*/的踩坑点在zsh通配符的*运算符优先级:zsh会先计算~两侧的集合差,再应用模式末尾的斜杠匹配规则。这个命令实际执行的逻辑是:先把所有以大写开头的项(包括README.md这类普通文件)全部排除,再从剩余内容里只保留目录类型,完全达不到“仅排除大写开头目录”的目标。
  • 写*~[A-Z]*的问题是没有区分项的文件类型,会把所有大写开头的普通文件一并过滤掉,不符合“保留大写开头普通文件”的要求。

语法逻辑说明

你已经开启了setopt extendedglob,zsh本身支持通配符类型限定,完全不需要靠在模式末尾硬写斜杠判断目录:

  • [A-Z]*(/)是一个完整的匹配单元:对应「所有文件名以大写字母开头、且属性为目录」的项,也就是需要排除的目标集合。
  • 开头的*匹配当前目录下所有非隐藏的文件、目录全量集合。
  • ~是扩展通配符提供的差集运算符:表示从前面的全量集合中,移除后面匹配到的目标项。
  • 搭配的ls -dF参数:-d用于直接列出目录本身而非目录内部内容,-F会自动给输出的目录名末尾加斜杠做类型标识,不需要手动在通配符里硬写斜杠,从根源避免优先级问题。

匹配效果验证

对应你给出的示例场景,当前目录包含:

  • 目录:Archive(大写开头目录,需排除)、data(小写开头目录,需保留)
  • 普通文件:README.md(大写开头普通文件,需保留)、test.txt(小写普通文件,需保留)
    执行上述命令后的输出完全符合预期:
data/  README.md  test.txt

可选扩展

如果需要连带匹配隐藏文件、隐藏目录,可以给通配符加(D)限定符,调整为:

ls -dF *(D)~[A-Z]*(/D)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 00:45:04