通配符

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 * 预览匹配结果)。