通配符linux命令
通配符linux命令详细介绍
在 Linux 中,通配符(Wildcard)是由 shell 解释的特殊字符,用于匹配文件名或路径名的模式。通过通配符可以快速批量操作文件(如 ls、rm、cp 等命令),避免逐个指定文件名。以下是常用通配符及其用法:
1. *:匹配任意字符(包括空)
- 作用:匹配任意长度(0 个或多个)的任意字符(字母、数字、符号等)。
- 示例:
ls *.txt:列出当前目录下所有以.txt结尾的文件(如a.txt、readme.txt)。rm log*:删除所有以log开头的文件(如log1、log2025.txt)。cp /data/*.csv /backup:将/data目录下所有.csv文件复制到/backup。
2. ?:匹配单个任意字符
- 作用:严格匹配一个任意字符(不能多也不能少)。
- 示例:
ls file?.txt:匹配file后接一个字符、以.txt结尾的文件(如file1.txt、filea.txt,但不匹配file.txt或file12.txt)。mv img?.png /tmp:将img后接一个字符、以.png结尾的图片移动到/tmp(如img0.png、imgA.png)。
3. []:匹配括号内的任意一个字符
- 作用:匹配括号内指定范围内的单个字符(支持数字、字母的连续范围或离散字符)。
- 示例:
ls file[1-3].txt:匹配file1.txt、file2.txt、file3.txt(1-3表示数字范围)。ls file[a-c].txt:匹配filea.txt、fileb.txt、filec.txt(a-c表示字母范围)。ls file[1a].txt:匹配file1.txt或filea.txt(离散字符)。
4. [^] 或 ![]:匹配不在括号内的任意一个字符
- 作用:匹配不包含括号内字符的单个字符(
^或!表示取反)。 - 示例:
ls file[^1].txt:匹配file后接非1的单个字符、以.txt结尾的文件(如file2.txt、filea.txt,但排除file1.txt)。rm img[!0-9].png:删除img后接非数字字符、以.png结尾的文件(如imgA.png、imgB.png)。
5. {}:展开多个模式(生成批量路径)
- 作用:展开大括号内的内容,生成多个路径或文件名(常用于批量操作)。
- 示例:
ls file{1,2,3}.txt:等价于ls file1.txt file2.txt file3.txt(展开为三个文件)。cp {a,b}file.txt /backup:复制afile.txt和bfile.txt到/backup。mkdir -p /data/{2023,2024,2025}/logs:创建/data/2023/logs、/data/2024/logs、/data/2025/logs三级目录(-p表示递归创建)。
注意事项
- 通配符由 shell(如 Bash)处理,仅用于文件名或路径名的匹配,与正则表达式(用于文本内容匹配,如
grep、sed)不同。 - 若文件名本身包含通配符字符(如
*、?),需用引号(""或'')或转义符(\)避免被 shell 解释。例如:ls "file?.txt"或ls file\?.txt(匹配文件名含?的文件)。 - 通配符匹配结果为空时,部分命令(如
rm)可能报错,可通过shopt -s nullglob让空匹配返回空(不报错)。
通过灵活组合这些通配符,可以高效完成文件的批量操作,大幅提升 Linux 命令行的使用效率。