跳到主要内容

Glob语法

· 阅读需 2 分钟
XingHunm
Tech Enthusiast

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.js
  • src/**/*.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. 注意事项​

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