Glob patterns

来自牛奶河Wiki
跳到导航 跳到搜索

Glob 风格模式(Glob patterns)是一种简化的、用于匹配文件路径或字符串的模式匹配语法。比正则表达式更简单易懂,常用于命令行工具、文件管理器、编程语言中的文件操作等场景。

*

匹配任意数量的字符(包括零个字符)。

*.txt 匹配所有以 .txt 结尾的文件。
data* 匹配以 data 开头的所有文件或目录。
*.* 匹配所有包含点号 . 的文件。
* 匹配所有文件和目录。

?

匹配单个字符。

file?.txt 匹配 file1.txt、fileA.txt、file_.txt 等,但不匹配 file.txt 或 file12.txt。
?.txt 匹配 a.txt, 1.txt 等

[]

匹配方括号内的任意一个字符。

[abc].txt 匹配 a.txt、b.txt 或 c.txt。
file[0-9].txt 匹配 file0.txt、file1.txt、...、file9.txt。
[a-zA-Z].txt 匹配以小写或大写字母开头,.txt结尾的文件

[!...][^...]

匹配不在方括号内的任意一个字符。

[!abc].txt 匹配除了 a.txt、b.txt 和 c.txt 之外的任何以 .txt 结尾的文件。
[^0-9].txt 匹配不以数字开头, .txt结尾的文件

{a,b,c}

匹配花括号内的任意一个子模式。这与其他通配符不同,它不是字符级别的匹配,而是整个子模式的匹配。

file{1,2,3}.txt 匹配 file1.txt、file2.txt 或 file3.txt。
{*.txt,*.md} 匹配所有以 .txt 或 .md 结尾的文件。
dir/{subdir1,subdir2}/* 匹配 dir/subdir1/ 和 dir/subdir2/ 下的所有文件和目录。

\

转义字符。用于转义上述特殊字符,使其失去特殊含义,只代表字符本身。

\*.txt 匹配名为 "*.txt" 的文件(而不是所有以 ".txt" 结尾的文件)。
file\?.txt 匹配名为 "file?.txt" 的文件。

**

递归匹配零个或多个目录。部分支持,如 bash 4+, zsh, Python(glob.glob("src/**/*.py", recursive=True)

src/**/*.py 匹配 src/ 目录及其所有子目录(包括子目录的子目录)中的所有 .py 文件。 例如,它会匹配 src/main.py、src/utils/helper.py、src/ tests/unit/test_foo.py 等
**/*.txt 匹配当前目录以及所有子目录下的 .txt 文件。