Glob Patterns
Globs, also known as glob patterns, are patterns that can expand a wildcard pattern into a list of pathnames that match the given pattern.
A glob pattern is a pattern that specifies sets of filenames with wildcard characters. Wildcard characters can match zero or more characters in a path segment, such as * or ?, or any number of path segments, such as **. Glob patterns are used to expand a wildcard pattern into a list of pathnames that match the given pattern. For example, the glob pattern *.txt matches all files with names ending in .txt.
以下表述含义相同:
- Globs = Glob patterns
- Wildcards = Wildcard characters =
*and?
通配符早于正则表达式出现,可以看作是原始的正则表达式。主要用于文件路径匹配。
基础语法
glob 模式匹配大致可以分为以下两种情况:
- 通配符
?matches any character exactly once*matches a string of zero or more characters.
- 字符组/字符集合/字符区间
[...]
归纳为以下表格:
| 通配符 | 匹配模式 |
|---|---|
* | 匹配 0 个或多个字符 |
? | 匹配 1 个字符 |
[abc] | 匹配方括号内字符集合中的单个字符 |
[a-z] | 匹配方括号内字符区间中的单个字符 |
[^abc] 或 [!abc] | 匹配非方括号内字符集合中的单个字符 |
[^a-z] 或 [!a-z] | 匹配非方括号内字符区间中的单个字符 |
扩展语法
扩展语法,主要包含三种:
- Brace Expansion
- globstar
- extglob
应用实例
glob 模式匹配最常见的应用场景是匹配文件路径,使用 glob 匹配文件路径比正则表达式更简洁。一般情况下,通配符不会匹配文件路径分隔符 (/ on Linux/Unix, MacOS, etc. or \ on Windows) 。
*.md: 匹配当前目录下,所有以.md结尾的 Markdown 文件**/*.md: 匹配当前目录下,以及各级子目录下的,所有以.md结尾的 Markdown 文件
扩展阅读
有效的 glob 模式
- 字母数字字符 (
A-Za-z0-9)、下划线 (_)、连字符 (-) 和点号 (.) 必须逐字匹配 - 特殊 glob 字符
*,?,**和字符集合[...]:在[...]内,连字符使用在中间时-表示范围(例如a-z,根据 Unicode 码点排序),使用在开头或结尾时,则按字面量进行匹配 - 路径分隔符必须是 正斜线字符 (
/) - 模式使用的路径永远是相对路径,模式应总是相对于包含该文件的目录;因此,不得使用前导斜线字符
- 不得使用父目录指示符 (
..)