当前位置:首页>Linux>Linux通配符完全指南

Linux通配符完全指南

  • 2026-09-06 09:55:51
Linux通配符完全指南

一、什么是通配符?

通配符是一种特殊字符,用于在Linux命令行中匹配文件名或路径名。它们被shell(如bash)解释,而不是由命令本身处理。

二、核心通配符

1. 星号 * - 匹配任意多个字符(包括0个)

# 基本用法
ls *.txt          # 列出所有以.txt结尾的文件
rm *              # 删除当前目录所有文件(危险!)
cp *.jpg /images/ # 复制所有jpg图片

# 组合使用
ls file*          # 匹配file、file1、file.txt等
ls a*b            # 匹配ab、acb、a123b等

2. 问号 ? - 匹配任意单个字符

# 精确匹配一个字符
ls file?.txt      # 匹配file1.txt、fileA.txt,但不匹配file10.txt
rm ??              # 删除所有两个字符的文件名
ls a?b             # 匹配aab、a3b、a-b,但不匹配ab

3. 方括号 [] - 匹配指定范围内的任意单个字符

# 字符集合
ls [abc]*         # 以a、b或c开头的文件
rm file[0-9].txt  # 删除file0.txt到file9.txt

# 范围表示
ls [a-z]          # 小写字母
ls [A-Z]          # 大写字母
ls [0-9]          # 数字
ls [a-zA-Z]       # 所有字母

# 组合使用
ls [0-9][0-9]     # 两个数字的文件名
ls [a-cx-z]       # a-c或x-z范围

4. 排除模式 [!] 或 [^] - 匹配不在范围内的字符

ls [!0-9]*        # 不以数字开头的文件
rm [^a-z]*        # 删除不以小写字母开头的文件
ls file[!0-9].txt # file后跟非数字字符

三、高级通配符(需开启extglob)

开启扩展通配符

shopt-s extglob  # 开启
shopt-u extglob  # 关闭

扩展模式语法

模式含义示例
*(pattern)匹配0次或多次ls *(abc)
+(pattern)匹配1次或多次rm file+([0-9])
?(pattern)匹配0次或1次ls ?(test)file
@(pattern)精确匹配1次cp @(txt|pdf)/
!(pattern)不匹配rm !(*.txt)
# 实用示例
rm !(*.txt)       # 删除非txt文件
ls+([0-9])       # 显示纯数字文件
cp @(jpg|png)/    # 复制jpg或png文件

四、转义通配符

当文件名包含通配符字符时,需要转义:

# 方法1:反斜杠
ls \*             # 显示名为*的文件
cat file\?        # 显示名为file?的文件

# 方法2:引号
ls'*'# 同上
cat'file?'# 同上

# 方法3:双引号(部分转义)
ls"*"# 也有效

五、实战示例

文件管理

# 批量操作
chmod755 *.sh                    # 所有脚本文件添加执行权限
rename 's/\.JPG$/.jpg/' *.JPG     # 批量重命名(需安装rename)
tar -czf backup.tar.gz *.doc *.pdf # 打包特定文件

# 选择性删除
rm-f *~                           # 删除所有备份文件(以~结尾)
rm-rf [A-Z]*                      # 删除所有大写字母开头的文件

结合find命令

# find使用自己的通配符语法(需要引号)
find . -name"*.txt"# 查找txt文件
find . -name"[a-z]*.jpg"# 小写字母开头的jpg
find . -name"[!.]*"# 不以点开头的文件

六、常见陷阱与注意事项

1. 隐藏文件

ls *           # 不显示隐藏文件(以.开头)
ls .*          # 显示隐藏文件(注意:包括.和..)
ls .[!.]*      # 安全显示隐藏文件(排除.和..)

2. 无匹配时的行为

ls *.xyz       # 如果没有xyz文件,shell可能直接传递"*.xyz"
# 导致ls报错:没有该文件

3. 通配符与正则表达式的区别

# 通配符(文件名扩展)
*.txt          # 所有txt文件

# 正则表达式(文本匹配)
.*\.txt        # 同上,但用于grep等工具

七、快速参考表

通配符含义示例匹配不匹配
*任意字符串a*cac, abc, aXcab, bbc
?单个字符a?cabc, aXcac, abbc
[abc]a或b或c[ab]cac, bccc, dc
[a-z]a到z[a-c]xax, bx, cxdx, Ax
[!a]非a[!0-9]*a.txt, b.pdf1.txt, 2.doc

最新文章

随机文章