一、基础通配符种类
![图片[1]_Linux 通配符详解:种类与使用方式_知途无界](https://zhituwujie.com/wp-content/uploads/2025/04/d2b5ca33bd20250418100826.png)
1. 星号 *
- 功能:匹配任意长度(包括零长度)的任意字符
- 示例:
ls *.txt # 列出所有.txt文件
rm doc_* # 删除所有以doc_开头的文件
2. 问号 ?
- 功能:匹配任意单个字符
- 示例:
ls file?.log # 匹配file1.log, fileA.log 但不匹配file10.log
cp config.? config.backup # 备份单字符扩展名的配置文件
3. 方括号 []
- 功能:匹配括号内的任意单个字符
- 示例:
ls image[123].jpg # 匹配image1.jpg, image2.jpg, image3.jpg
rm log_[A-Z].txt # 删除log_A.txt到log_Z.txt
4. 范围表示 [a-z] / [0-9]
- 功能:匹配指定范围内的单个字符
- 示例:
ls chapter[1-5].md # 匹配chapter1.md到chapter5.md
touch report_Q[1-4].pdf # 创建report_Q1.pdf到report_Q4.pdf
5. 排除匹配 [!abc]
- 功能:匹配不在括号内的任意单个字符
- 示例:
ls [!a-z]*.tmp # 列出不以字母开头的.tmp文件
rm *[!0-9].csv # 删除不以数字结尾的.csv文件
二、高级通配符技巧
1. 花括号扩展 {}
- 功能:生成组合字符串(不是真正的通配符但常配合使用)
- 示例:
touch file{1..3}.txt # 创建file1.txt, file2.txt, file3.txt
cp /path/{old,new}/config.ini # 同时操作多个路径
2. 字符类 [[:class:]]
- 预定义类:
[:alpha:]:字母字符[:digit:]:数字字符[:alnum:]:字母数字字符[:space:]:空白字符- 示例:
ls *[[:digit:]].log # 列出以数字结尾的.log文件
grep '[[:space:]]+$' *.txt # 查找以空格结尾的行
3. 精确数量匹配 {n,m}
- 功能:通过
extglob启用,匹配指定重复次数 - 启用:
shopt -s extglob # Bash中启用扩展模式
- 示例:
ls file-{1..3}.txt # 匹配file-1.txt到file-3.txt
rm -v ?(*.bak|*.tmp) # 删除所有.bak或.tmp文件
三、通配符使用场景详解
1. 文件操作
# 批量重命名
for file in *.jpeg; do mv "$file" "${file%.jpeg}.jpg"; done
# 复杂匹配
ls project_[0-9][0-9][A-Z].log # 匹配project_01A.log等格式
2. 文本处理
# 查找多种扩展名的文件
grep "error" *.log *.txt *.csv
# 使用通配符作为参数
wc -l /var/log/*/access.log
3. 条件判断
if [[ $filename == *.enc ]]; then
echo "加密文件 detected"
fi
四、通配符与正则表达式的区别
| 特性 | Shell通配符 | 正则表达式 |
|---|---|---|
| 匹配目标 | 文件名 | 文本内容 |
*含义 | 任意字符序列 | 前项0次或多次 |
?含义 | 单个任意字符 | 前项0次或1次 |
[]用法 | 字符集合 | 字符集合 |
| 转义字符 | 通常不需要 | 经常需要\转义 |
五、实用技巧与注意事项
1. 安全技巧
# 总是引用变量防止意外扩展
rm -i "$filename"
# 先预览再执行
echo rm *.tmp # 先查看会删除哪些文件
2. 性能优化
# 避免过度宽泛的匹配(特别是在大目录中)
ls /path/*/subdir/*.log # 可能很慢
find /path -type f -name "*.log" -exec ls {} + # 更高效
3. 特殊场景处理
# 匹配带空格的文件名
for file in *" "*; do echo "$file"; done
# 匹配隐藏文件(需设置dotglob)
shopt -s dotglob
ls .*
六、通配符组合示例
复杂匹配案例
# 匹配所有2023年1月1日到9日的日志文件
ls access_log_2023-01-0[1-9].gz
# 查找非备份的配置文件
ls /etc/[!.]*[!~] # 排除隐藏文件和备份文件(~结尾)
# 批量创建季度报告目录
mkdir -p reports/2023_Q{1..4}/{sales,marketing}
通过掌握这些通配符的使用方法,可以大幅提高Linux命令行操作的效率。建议在实际使用中结合man bash的”Pattern Matching”部分深入学习。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END
























暂无评论内容