Glob语法
· 阅读需 2 分钟
Glob 是文件路径匹配的一种模式语法,常用于 Node.js、Python 等脚本工具中,比如 glob、fast-glob 或 bash 中的文件匹配。掌握 glob 语法对于文件操作和构建工具配置非常重要。
1. 基本通配符
| 符号 | 含义 | 示例 |
|---|---|---|
* | 匹配任意数量的任意字符(不包括 /) | *.js → 匹配 app.js, index.js |
? | 匹配单个字符 | file?.txt → file1.txt, fileA.txt |
[abc] | 匹配方括号内的任意字符 | file[12].txt → file1.txt, file2.txt |
[a-z] | 匹配范围内的字符 | file[a-c].txt → filea.txt, fileb.txt, filec.txt |
[!a-c] | 匹配不在范围内的字符 | file[!a-c].txt → filed.txt, filez.txt |
2. 递归匹配
| 符号 | 含义 | 示例 |
|---|---|---|
** | 匹配任意数量的子目录 | src/**/*.js → src/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/*.js→src/index.jssrc/**/*.js→src/index.js,src/utils/helper.js**/*.ts→src/app.ts,src/utils/data.ts**/*.{js,ts}→ 匹配所有 JS 和 TS 文件test/?est.js→test/test.js
4.2 常用模式
| 模式 | 说明 | 示例 |
|---|---|---|
**/*.js | 匹配所有 JS 文件 | 递归查找所有 .js 文件 |
src/**/*.{js,ts,jsx,tsx} | 匹配源码文件 | 匹配常见的源码文件类型 |
!**/*.test.js | 排除测试文件 | 使用 ! 前缀排除匹配 |
**/node_modules/** | 匹配 node_modules | 常用于排除目录 |
5. 注意事项
- 工具差异:不同工具对 glob 语法的支持可能有差异
- 性能考虑:
**递归匹配可能影响性能,谨慎使用 - 转义字符:特殊字符可能需要转义
- 大小写敏感:在 Linux/macOS 上区分大小写,Windows 不区分