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

Zsh glob 疑问:排除vendor/文件夹内文件的写法为何失效?

为什么**/*~vendor/在zsh extendedglob下不生效?

首先得明确zsh扩展通配符(extendedglob)里~的作用:它是对前面的匹配结果做取反排除,但你的写法逻辑错了。

  • **/*的匹配范围是当前目录及子目录下的所有非隐藏文件/目录(包括vendor目录本身,以及vendor下面的所有文件)
  • 而~vendor/只是排除了名为vendor/的这个目录条目,完全没处理它下面的文件,所以你还是会看到vendor目录里的内容,自然达不到“排除整个vendor文件夹内所有内容”的效果。

正确的写法

要排除vendor目录下的所有内容,得把取反的目标指向整个vendor路径下的条目:

  1. 用~取反的正确写法:

    **/*~vendor/**
    

    这里vendor/**匹配vendor目录下的所有内容,~把这些内容从**/*的结果里排除掉。

  2. 更直观的写法(用^前缀取反,extendedglob下支持):

    ^vendor/**
    

    直接匹配所有不属于vendor目录下的内容,逻辑更清晰。

额外注意点

  • 确保确实启用了extendedglob:可以用setopt extendedglob命令确认(如果没开,先执行这个命令)
  • 如果要包含隐藏文件,需要加上dotglob选项:setopt dotglob,否则**/*不会匹配.开头的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:25:16