跳到主要内容

Glob语法

· 阅读需 2 分钟
XingHunm
Tech Enthusiast

Glob 是文件路径匹配的一种模式语法,常用于 Node.js、Python 等脚本工具中,比如 glob、fast-glob 或 bash 中的文件匹配。掌握 glob 语法对于文件操作和构建工具配置非常重要。

1. 基本通配符

符号含义示例
*匹配任意数量的任意字符(不包括 /*.js → 匹配 app.js, index.js
?匹配单个字符file?.txtfile1.txt, fileA.txt
[abc]匹配方括号内的任意字符file[12].txtfile1.txt, file2.txt
[a-z]匹配范围内的字符file[a-c].txtfilea.txt, fileb.txt, filec.txt
[!a-c]匹配不在范围内的字符file[!a-c].txtfiled.txt, filez.txt

2. 递归匹配

符号含义示例
**匹配任意数量的子目录src/**/*.jssrc/app.js, src/components/button.js

注意: 在一些工具中,** 必须与 / 结合才能匹配子目录。

3. 组合和分隔

符号含义示例
{a,b}匹配 a 或 b*.{js,ts} → 匹配 .js.ts 文件
,用在 {} 内表示选择同上
/目录分隔符src/*.js → 匹配 src 目录下的 .js 文件

4. 实际应用示例

假设目录结构如下:

project/
├─ src/
│ ├─ index.js
│ ├─ app.ts
│ └─ utils/
│ ├─ helper.js
│ └─ data.ts
└─ test/
└─ test.js

4.1 基本匹配示例

  • src/*.jssrc/index.js
  • src/**/*.jssrc/index.js, src/utils/helper.js
  • **/*.tssrc/app.ts, src/utils/data.ts
  • **/*.{js,ts} → 匹配所有 JS 和 TS 文件
  • test/?est.jstest/test.js

4.2 常用模式

模式说明示例
**/*.js匹配所有 JS 文件递归查找所有 .js 文件
src/**/*.{js,ts,jsx,tsx}匹配源码文件匹配常见的源码文件类型
!**/*.test.js排除测试文件使用 ! 前缀排除匹配
**/node_modules/**匹配 node_modules常用于排除目录

5. 注意事项

  1. 工具差异:不同工具对 glob 语法的支持可能有差异
  2. 性能考虑** 递归匹配可能影响性能,谨慎使用
  3. 转义字符:特殊字符可能需要转义
  4. 大小写敏感:在 Linux/macOS 上区分大小写,Windows 不区分