通配符
Linux 通配符详解
通配符是Linux命令行中用于快速匹配文件/目录名称的特殊字符,无需逐个输入文件名,大幅提升操作效率,核心用于 ls 、 cp 、 rm 、 mv 等命令。
核心通配符(4个最常用)
通配符 作用描述 示例 匹配结果(假设当前目录有file1.txt、file2.log、test.py、data1、data2)
* 匹配任意长度的任意字符(包括0个字符) ls f* file1.txt、file2.log(匹配以f开头的所有文件)
? 匹配单个任意字符(必须占1个位置) ls file?.txt file1.txt(仅匹配file后1个字符+ .txt ,file2.log不匹配)
[] 匹配括号内任意一个字符(字符集/范围) ls file[12].* file1.txt、file2.log(匹配file后是1或2的文件)
[^] 匹配不在括号内的任意一个字符(取反) ls [^f]* test.py、data1、data2(匹配不以f开头的所有文件)
[!] 等同于[^]
进阶用法(字符范围与特殊匹配)
1. 字符范围匹配( [] 中用 - 表示连续范围)
- ls file[1-5].txt :匹配file1.txt~file5.txt(数字连续范围)
- ls [a-z]* :匹配以小写字母开头的所有文件(字母连续范围)
- ls [A-Z0-9]* :匹配以大写字母或数字开头的所有文件(混合范围)
2. 特殊字符集(等价于范围,更简洁)
特殊字符集 等价范围 作用 示例
[[:digit:]] [0-9] 匹配任意数字 ls file[[:digit:]].txt → file1.txt、file2.txt
[[:lower:]] [a-z] 匹配任意小写字母 ls [[:lower:]].py → test.py
[[:upper:]] [A-Z] 匹配任意大写字母 ls [[:upper:]]* → 匹配以大写开头的文件
[[:alnum:]] [a-zA-Z0-9] 匹配任意字母或数字 ls [[:alnum:]]* → 匹配字母/数字开头的文件
典型实操示例
1. 批量查看特定后缀文件
ls *.txt # 查看所有.txt后缀的文件
ls *.log *.py # 查看.log和.py后缀的所有文件
2. 批量复制/移动文件
cp file?.txt /tmp/ # 复制file后带1个字符的.txt文件到/tmp
mv [d]* /data/ # 移动所有以d开头的文件/目录到/data
3. 批量删除文件(谨慎使用!)
rm -f test[1-3].log # 删除test1.log、test2.log、test3.log
rm -f [^a-z]* # 删除不以小写字母开头的所有文件(避免误删关键文件)
4. 匹配带特殊字符的文件名
若文件名含 * 、 ? 等通配符(如 file*test.txt ),需用 \ 转义:
ls file\*test.txt # 匹配文件名中实际含*的文件
注意事项
1. 通配符匹配区分大小写(Linux默认大小写敏感), *.TXT 和 *.txt 是不同匹配。
2. * 无法匹配以 . 开头的隐藏文件(如 .bashrc ),需用 .* 匹配隐藏文件( ls .* )。
3. 避免在 rm -rf * 中滥用 * ,尤其是root用户,可能误删系统关键文件(可先用 ls * 预览匹配结果)。