1 个不稳定版本
使用旧的 Rust 2015
0.1.2 | 2014年11月24日 |
---|
在 文件系统 中排名 1489
16KB
348 行(不包括注释)
pathmatch
:更好的 fnmatch
这是一个开发改进替代 POSIX fnmatch
函数的实验。例如,在实现类似 .gitignore
的功能时可以使用它。
模块接口目前是一个全局函数,没有额外的选项
pub fn pathmatch(pattern: &str, pathstring: &str) -> bool
注意:此实现并不完全符合实际的 .gitignore
,并包含更多功能(例如 {}
模式)。
快速了解这个想法
*.txt
匹配不带路径的文件名,如果它们以 “.txt” 结尾
one.txt
two.txt
**.txt
匹配任何以 “.txt” 结尾的路径
one.txt
two.txt
foo/3.txt
foo/bar/4.txt
**/build/**
将匹配包含 “build” 文件夹的任何路径,包括裸字符串 build
本身。
**/build/{Debug,Release}
匹配最后两个文件夹是 build/Debug
或 build/Release
的路径
build/Debug
build/Release
subproject1/build/Debug
subproject1/build/Release
换句话说,**/
可能匹配路径字符串的开始,/**
可能匹配路径字符串的末尾,而 /**/
可能匹配单个路径分隔符(/
)。要禁用此行为,明确要求在之前/之后存在某些内容:*/**/build/{Debug,Release}
,*/**/build/**/*
。
也支持通配符 ?
,它匹配除了路径分隔符之外的单个字符。
pmfind
命令行工具
您可以使用包含的 pmfind
工具来测试 pathmatch()
在实际应用中的效果
$ ./pmfind '{*.rs,Makefile}' '**/{logs,master}'
pmfind.rs
pathmatch.rs
Makefile
.git/refs/remotes/origin/master
.git/refs/heads/master
.git/logs
.git/logs/refs/remotes/origin/master
.git/logs/refs/heads/master
用法
Usage:
./pmfind [options] [pattern ...]
Options:
-C --dir dir change directory to this before starting
-h --help print help and exit
如果模式以 !
开头,pmfind
会从输出中排除匹配该模式的路径,否则会打印这些路径。模式按照在命令行中出现的顺序应用,因此最后匹配的结果决定了路径是否会被打印。没有任何模式匹配的路径永远不会被打印。例如
$ ./pmfind '**/master'
.git/refs/remotes/origin/master
.git/refs/heads/master
.git/logs/refs/remotes/origin/master
.git/logs/refs/heads/master
$ ./pmfind '**/master' '!**/logs/**'
.git/refs/remotes/origin/master
.git/refs/heads/master
$ ./pmfind '**/master' '!**/logs/**' '**/logs/refs/heads/master'
.git/refs/remotes/origin/master
.git/refs/heads/master
.git/logs/refs/heads/master