Shell Glob Pattern Tester
指导
Shell Glob Pattern Tester
将 glob 模式与文件路径列表进行对比,实时查看哪些路径匹配——支持 Bash、Zsh、.gitignore、Python 和 Go 的语义。 fnmatch,以及 Go path.Match. 输入一个模式如 src/**/*.{js,ts},粘贴路径,随着输入,匹配项会高亮为绿色,不匹配项则逐渐变灰。
如何使用
- 在 全局模式 字段中输入一个 glob 模式(例如
**/*.log). - 选择一个 Shell / 模式 ——相同的模式在 Bash、.gitignore、Python
fnmatch或 Go 中可能匹配不同的路径集合。 - 将您的 文件路径 每行一个——或者点击内置示例。
- 匹配项以绿色并带有勾号高亮;不匹配项保持灰色。摘要部分显示匹配数量以及你选择的模式说明。
- 在模式前加上
!以反转匹配(高亮所有不匹配的路径)。 不是 匹配
特征
- 五种 shell 模式 – Bash(带 globstar)、Zsh extended_glob、.gitignore、Python
fnmatch,以及 Gopath.Match,每种模式均具有正确的语义,包括括号扩展。*,**,?实时高亮 - – 随着你输入模式,路径会实时重新评估;无需提交按钮。 括号扩展
- 在 Bash 和 Zsh 模式中支持替代项,包括嵌套和交叉组合如 -
{a,b,c}字符类src/{js,ts}/**/*.{spec,test}.ts. - 否定类,以及范围如 -
[abc],[!abc]否定[A-Z]. - – 在任何模式前加上 以翻转匹配。
!模式说明 - – 每个结果下方会显示一段简短说明,解释所选模式如何解释该模式。 – 可加载一个网页项目布局、一个 .gitignore 风格的日志过滤器或一个文档/README 示例,通过观察学习。
- 快速示例 – 模式和路径始终保留在你的浏览器中;加载后可离线使用。
- 仅客户端 调试 .gitignore 规则
常见用例
- – 粘贴来自 的路径列表,查看哪些路径会被候选规则忽略。
git status编写构建 glob 参数 - – 验证输入到 的模式是否匹配你期望的文件,且不会匹配其他文件。
tsc,esbuild, 或者prettier --write编写 CI 路径过滤器 - – 确认 GitHub Actions 或 GitLab CI 中的过滤器在推送前命中正确的文件子集。 翻译 shell 脚本
paths:– 验证在将代码从 Bash 移植到 Python 或 Go 服务后,模式是否仍然有效。 - 教学 glob 语义 – 向学生展示为什么
- 在 Bash 中不会跨越目录边界,但在 中会。
*在 glob 模式中,* 和 ** 有什么区别?fnmatch.
常问问题
-
一个
匹配单个路径段内的任意字符,但不会跨越目录分隔符(
*)。双星号/(称为 globstar)匹配任意数量的字符,跨越任意数量的目录段。因此**可以匹配,而src/*.js匹配src/index.js但不提供src/utils/index.js可以匹配两者。并非所有 glob 语法都支持src/**/*.js——Python**和 Gofnmatch将两个星号视为两个独立的path.Match如何在 glob 匹配中与正则表达式不同?*标记。 -
Glob 是一种更小的模式语言,专为匹配文件路径而设计。大多数字符是字面字符:
,以及(在某些 shell 中)
*,?,[...]是唯一的元字符。没有量词语法,没有锚点,没有前瞻/后顾,也没有回引用。实现通常会将 glob 转换为正则表达式,但用户无需使用正则表达式思维。Glob 有意设计得简单,以使 shell 命令行保持简短和可预测。{...}为什么括号扩展在所有 glob 语法中都不支持? -
括号扩展(
展开为三个替代项)是 Bash 和 Zsh 中的技术特性,在 glob 匹配前被 shell 评估。Shell 会先将括号表达式展开为多个参数,然后独立匹配生成的文件 glob。像
{a,b,c}(在git)等工具使用的纯 glob 库不实现括号扩展,因为这并非真正属于 glob 语言的一部分——它只是 shell 层级的预处理步骤。.gitignore在 glob 模式中,前置 ! 有什么含义?fnmatch,以及 Gopath.Match其确切含义取决于上下文。在字符类中, -
会否定该类——匹配除
之外的任意单个字符。作为整个模式的前缀,
[!abc]主要是一个a,b, 或者c功能,用于重新包含之前被忽略的路径。大多数 shell 并不会将模式前缀的!视为否定——它们要么报错(Zsh 历史扩展),要么直接传递。在本测试器中,前置的.gitignore被解释为一个便利功能:它会反转匹配,使未匹配的路径高亮为绿色。!例如,src/**/*.{js,ts}!src/index.jssrc/utils/helpers.tsREADME.md...
