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

Zsh递归通配排除当前目录文件失效问题求助

问题原因与解决方法

原因分析

你遇到的问题源于Zsh扩展排除模式的路径匹配逻辑差异:

  • 当文件在子目录时,**/*.mkv会生成带完整路径前缀的文件名(比如New Folder With Items/xxx.mkv),此时排除模式**/*AV1*能精准匹配带路径的AV1文件(比如New Folder With Items/xxx-AV1.mkv),这些文件会被正确从结果中剔除。
  • 当文件在当前目录时,**/*.mkv展开的是不带路径前缀的直接文件名(比如xxx-AV1.mkv),而**/*AV1*的模式默认优先识别带目录分隔符的路径结构,无法正确匹配当前目录下的纯文件名,导致排除规则失效,所有.mkv文件都被列出。

另外需确认Zsh的extended_glob和globstar选项是否开启——这两个选项是扩展排除模式和递归路径匹配的基础,Mac默认Zsh可能未开启extended_glob,会直接导致排除规则完全不生效。

解决方法

1. 开启必要的Zsh选项

先执行以下命令开启扩展匹配和递归路径匹配功能:

setopt extended_glob globstar

如果想永久生效,可将这行添加到~/.zshrc文件中,重启终端即可。

2. 使用正确的排除命令

使用更精准的模式,同时覆盖当前目录和子目录的AV1文件排除:

ls **/*.mkv~**/*AV1*.mkv

或用更简洁的^符号(与~功能一致):

ls **/*.mkv^**/*AV1*.mkv

该命令会递归列出所有.mkv文件,同时排除任何路径(包括当前目录)中文件名含AV1的.mkv文件,无论文件位置都能正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:05:56