Linux 通配符详解:种类与使用方式

一、基础通配符种类

图片[1]_Linux 通配符详解:种类与使用方式_知途无界

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
喜欢就点个赞,支持一下吧!
点赞38 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容