glob
安装
cargo add glob
基本用法
查找当前目录下md文件
use glob::glob;
fn main() {
// entry = Result<PathBuf, GlobError>
for entry in glob("*.md").expect("Failed to read glob pattern") {
match entry {
// path = PathBuf
Ok(path) => println!("{}", path.display()),
Err(e) => println!("{:?}", e),
}
}
}
过滤规则
| 通配符 | 含义 |
|---|---|
* |
匹配当前层级任意字符,不跨 / |
** |
递归匹配任意层级目录 |
? |
匹配单个字符 |
[abc] |
匹配 a/b/c 中一个 |
[0-9] |
匹配一个数字 |
{a,b} |
某些 glob 库支持,但 Rust glob crate 不一定按 shell brace 展开 |
// 可以跨层级匹配
glob("src/**/*.rs")
// 匹配 file<X>.txt文件
glob("file?.txt")
// 匹配 filea.txt fileb.txt filec.txt
glob("file[abc].txt")
// 匹配 file[0-9].txt文件
glob("file[0-9].txt")
// 匹配除了filea.txt fileb.txt filec.txt外的文件
glob("file[!abc].txt")
// 匹配多个文件名
for pattern in ["*.rs", "*.toml"] {
for entry in glob::glob(pattern).unwrap() {
println!("{}", entry.unwrap().display());
}
}

浙公网安备 33010602011771号