命令行-通配符
1. 命令行-通配符
globbing patterns
命令行查询、编辑、过滤文件或目录对象时,使用通配符匹配文件或目录名称的文本格式
?
单个任意字符,不能匹配空格
# 创建测试数据
touch a.txt b.txt cd.txt 'e f.txt'
# 输出: a.txt. b.txt
ls ?.txt
# 输出: cd.txt
ls ??.txt
*
任意多个字符,可以匹配空格
适用以带有前缀或者后缀的名称的文件或目录名
# 创建测试数据
touch a.txt b.txt cd.txt 'e f.txt'
# 输出:a.txt b.txt cd.txt 'e f.txt'
ls *.txt
[]
方括号中任意字符
# 创建测试数据
touch a.txt b.txt cd.txt ce.txt cef.txt
# 输出:a.txt b.txt
ls [ab].txt
[^]
或[!]
非方括号内任意字符
# 创建测试数据
touch a.txt b.txt cd.txt ce.txt cef.txt
# 输出:cd.txt cef.txt ce.txt 'e f.txt'
ls [^ab]*.txt
# 等价
ls [!ab]*.txt
{}
匹配大括号里任意一个模式
# 创建测试数据
touch a.txt b.txt cd.txt ce.txt cef.txt
# 输出:a.txt b.txt
ls ls {a,b}.txt
# 输出:cd.txt ce.txt
ls c{d,e}.txt
{start..end}
匹配一个连续范围的字符
# 输出:a.txt b.txt c.txt d.txt
echo {a..d}.txt
2. 通配符执行过程
命令行会首先解释通配符,然后作为命令行的参数交给命令执行
- 通配符没有匹配到文件或者目录名,会原样输出
# 该目录下没有匹配名称的文件名,输出:ls: 无法访问 'tests*': 没有那个文件或目录
ls [adc]?.txt
- 不能匹配路径分隔符
/
# 创建测试数据
mkdir tests
#输出:ls: 无法访问 'tests*': 没有那个文件或目录
ls tests*
- 使用
单引号
包裹通配符变成普通字符
# 输出:ls: 无法访问 '?.txt': 没有那个文件或目录
ls '?.txt'