插件窝 干货文章 linux命令通配符有哪些

linux命令通配符有哪些

匹配 通配符 pattern 文件 417    来源:    2025-04-18

在 Linux 中,通配符(Wildcards)是 shell 提供的特殊字符,用于模式匹配文件名或路径。以下是常见的通配符及其用法:


1. 基础通配符

通配符 作用 示例
* 匹配任意数量(0个或多个)任意字符 ls *.txt(列出所有 .txt 文件)
? 匹配单个任意字符 ls file?.txt(匹配 file1.txt,但不匹配 file10.txt
[] 匹配括号内任意一个字符 ls [abc]*.txt(匹配以 abc 开头的 .txt 文件)

范围匹配
- [a-z]:匹配任意小写字母
- [0-9]:匹配任意数字
- [!a][^a]:匹配a 的字符


2. 扩展通配符(需开启 extglob

通过 shopt -s extglob 启用后支持更复杂的模式:

通配符 作用 示例
?(pattern) 匹配 0 或 1 次 pattern ls ?(*.txt|.log)(匹配 .txt.log 或空)
*(pattern) 匹配 0 次或多次 pattern ls *(backup)(匹配 backupbackupbackup 等)
+(pattern) 匹配 1 次或多次 pattern ls +(err|warn).log(匹配 err.logwarn.log 等)
@(pattern1\|pattern2) 匹配 任意一个 pattern ls @(*.sh|*.py)(匹配 .sh.py 文件)
!(pattern) 匹配 不符合 pattern 的内容 ls !(*.bak)(排除所有 .bak 文件)

3. 花括号扩展 {}

用于生成组合或序列(不是通配符,但常用于路径匹配): - 组合匹配
bash ls {file1,file2}.txt # 匹配 file1.txt 或 file2.txt cp /path/{old,new} # 等价于 cp /path/old /path/new - 序列生成
bash echo {1..5} # 输出 1 2 3 4 5 mkdir dir{01..10} # 创建 dir01 到 dir10


4. 转义通配符

若需匹配特殊字符本身(如 *?),使用转义符 \ 或引号:

ls \*.txt      # 匹配名为 "*.txt" 的文件
ls "*?.log"    # 匹配以 "?" 结尾的 .log 文件

常见场景示例

  1. 删除所有临时文件
    bash rm /tmp/*.tmp
  2. 批量重命名
    bash mv image.{jpg,png} # 将 image.jpg 改为 image.png
  3. 排除特定文件
    bash ls !(*.bak|*.tmp) # 列出非 .bak 或 .tmp 的文件(需 extglob)

注意事项

  • 通配符由 Shell 解释(非命令本身),如 ls *.txt 会先由 Shell 展开文件列表再传递给 ls
  • 若通配符无匹配项,默认保留原字符(如 echo *.xyz 无匹配时输出 *.xyz)。

掌握这些通配符能极大提升命令行操作效率!