linux命令通配符是shell提供的特殊字符,用于在命令行中匹配符合特定规则的文件名或目录名,避免逐个输入目标名称,大幅提升批量操作的效率。不同通配符的匹配逻辑存在差异,适用场景也各不相同。

常用linux通配符分类及用法
1. 星号通配符 *
星号是最常用的通配符,可匹配任意长度的任意字符,包括空字符。比如要列出当前目录下所有以.txt结尾的文件,就可以使用以下命令:
# 列出所有txt文件 ls *.txt
如果要匹配包含特定字符的文件,比如文件名中带有test的所有文件,命令如下:
# 匹配包含test的所有文件 ls *test*
2. 问号通配符 ?
问号仅匹配单个任意字符,不能匹配空字符。比如要匹配文件名是三个字符且以a开头的文件,可以使用:
# 匹配a开头的三字符文件名 ls a??
3. 方括号通配符 []
方括号用于匹配括号内指定的任意一个字符,支持字符范围表示。比如匹配以a到f开头的文件:
# 匹配a到f开头的文件 ls [a-f]*
如果要排除括号内的字符,可以在方括号开头加^或者!,比如匹配不是以a、b、c开头的文件:
# 排除以a、b、c开头的文件 ls [^abc]*
4. 花括号通配符 {}
花括号用于生成一组指定的字符串组合,常用来批量创建或操作文件。比如同时创建三个测试文件:
# 批量创建三个文件
touch test_{1,2,3}.log
花括号也支持序列生成,比如生成1到5的数字序列:
# 生成1到5的序列
echo {1..5}
通配符使用注意事项
- 通配符由shell负责解析,在传递给命令之前就会完成匹配,如果当前目录下没有符合匹配规则的文件,shell会把通配符原样传递给命令,可能导致命令执行异常。
- 如果文件名本身包含通配符字符,需要使用反斜杠
进行转义,比如要匹配名为test*.txt的文件,需要输入test*.txt。 - 不同shell对通配符的支持可能存在细微差异,本文示例基于bash shell,其他shell可参考对应文档。
通配符匹配规则对比表
| 通配符 | 匹配规则 | 示例 |
|---|---|---|
| * | 任意长度任意字符 | *.jpg 匹配所有jpg文件 |
| ? | 单个任意字符 | file?.txt 匹配file1.txt、filea.txt等 |
| [] | 括号内单个字符 | [0-9].log 匹配1.log、2.log等 |
| {} | 指定字符串组合 | {a,b}.txt 匹配a.txt、b.txt |