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

如何用Glob表达式排除隐藏文件与测试文件?

Glob表达式排除特定文件问题解决

文件列表

./app/tags.ts
./app/tag.ts
./app/status.ts
./app/bar/{foo}/baz.ts
./app/.hidden.ts
./app/_hidden.ts
./app/foo_dir/.hidden.ts
./app/some/testing_should_be_hidden.test.ts

需求

排除以下三类文件:

  • 文件名以.开头的隐藏文件
  • 文件名以_开头的文件
  • 文件名中包含.test的测试文件

尝试过的表达式及问题

  1. 尝试表达式:
./**/[!._]*^(?!*test).{ts,js}

该表达式未生效,原因是^(?!*test)属于正则表达式的负前瞻语法,Glob不支持这种语法。

  1. 尝试表达式:
./**/[!._]*.{ts,js}

可以排除以.或_开头的文件,但无法排除包含.test的测试文件。

解决方案

方案1:多模式排除(推荐,兼容性好)

大多数支持Glob的工具(如node-glob、Vite、Webpack等)支持用!前缀指定排除规则,先匹配所有目标文件,再排除不符合要求的:

./**/*.{ts,js}
!./**/.*
!./**/_*
!./**/*.test.{ts,js}
  • 第一行:匹配所有目录下的.ts/.js文件
  • 第二行:排除所有以.开头的文件
  • 第三行:排除所有以_开头的文件
  • 第四行:排除所有以.test.ts/.test.js结尾的测试文件

方案2:单模式匹配(需工具支持扩展Glob)

如果使用的工具支持扩展Glob语法(如bash的extglob、node-glob的extglob选项),可以用单个表达式实现:

./**/[!._]*!(*.test).{ts,js}
  • [!._]*:匹配文件名不以.或_开头的部分
  • !(*.test):扩展Glob语法,匹配不包含.test的部分
  • 最终只会匹配符合要求的非隐藏、非测试文件

验证结果

用上述方案处理给定文件列表,会保留以下文件:

./app/tags.ts
./app/tag.ts
./app/status.ts
./app/bar/{foo}/baz.ts

其余文件均被正确排除。

内容的提问来源于stack exchange,提问作者M. Gara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:45:48