插件窝 干货文章 从头学起:掌握Linux命令中的通配符

从头学起:掌握Linux命令中的通配符

匹配 通配符 文件 字符 1039    来源:    2025-04-08

掌握Linux命令中的通配符:从入门到精通

什么是通配符?

通配符(Wildcards)是Linux/Unix系统中用于匹配文件名和路径的特殊字符,它们允许您在不完全知道文件名的情况下操作多个文件。通配符由shell解释,而不是由各个命令解释。

基础通配符

1. 星号 (*) - 匹配任意数量字符

* 代表任意长度的任意字符(包括零个字符)。

示例:

# 列出当前目录下所有.txt文件
ls *.txt

# 复制所有以"report"开头的文件
cp report* /backup/

# 删除所有以".tmp"结尾的文件
rm *.tmp

2. 问号 (?) - 匹配单个字符

? 代表任意一个字符。

示例:

# 列出所有5个字符长且以.txt结尾的文件
ls ????*.txt

# 查找file1.txt, file2.txt等,但不匹配file10.txt
ls file?.txt

3. 方括号 ([]) - 匹配指定范围内的字符

[] 匹配括号内指定的任意一个字符。

示例:

# 匹配file1.txt或file2.txt
ls file[12].txt

# 匹配a.txt, b.txt, c.txt
ls [a-c].txt

# 匹配任何数字
ls file[0-9].txt

高级通配符技巧

1. 排除字符 [^] 或 [!]

[^][!] 匹配不在括号内的字符。

示例:

# 匹配不以数字结尾的文件
ls *[^0-9].txt

# 匹配不以a,b,c开头的文件
ls [!a-c]*

2. 大括号扩展 {}

{} 可以生成多种组合,不是严格意义上的通配符,但非常有用。

示例:

# 创建多个目录
mkdir -p /path/{dir1,dir2,dir3}

# 复制文件到多个备份
cp file.txt{,.bak,.backup}

# 等同于 cp file.txt file.txt.bak file.txt.backup

3. 精确字符数量匹配

结合 ?* 可以精确匹配字符数量。

示例:

# 匹配正好5个字符的文件名
ls ?????*

# 匹配至少3个字符的文件名
ls ???*

实用示例

1. 批量重命名文件

# 将所有.jpg文件改为.png
for file in *.jpg; do mv "$file" "${file%.jpg}.png"; done

2. 查找特定格式文件

# 查找所有2020年1月到9月的日志文件
ls log_2020-0[1-9]-*.txt

3. 安全删除

# 删除所有临时文件但先确认
rm -i *.tmp

注意事项

  1. 引号的影响:通配符在引号中不会展开

    # 这不会匹配文件,而是查找字面上的"*.txt"
    find . -name "*.txt"
    
    # 这会展开通配符
    find . -name *.txt
    
  2. 隐藏文件:通配符默认不匹配以点(.)开头的隐藏文件

    # 要匹配隐藏文件,需要明确指定
    ls .*
    
  3. 递归匹配:使用**可以递归匹配(需要启用globstar选项)

    shopt -s globstar
    ls **/*.txt  # 当前目录及子目录中的所有.txt文件
    
  4. 区分大小写:Linux文件系统通常区分大小写

    # 这两个匹配不同
    ls *.TXT
    ls *.txt
    

练习建议

  1. 创建一个测试目录,生成各种文件名模式进行练习
  2. 尝试结合find命令使用通配符
  3. 练习在脚本中使用通配符进行文件操作

掌握通配符可以显著提高您在Linux命令行中的工作效率,是每个Linux用户必备的基础技能。