命令行-通配符

1. 命令行-通配符

globbing patterns 命令行查询、编辑、过滤文件或目录对象时,使用通配符匹配文件或目录名称的文本格式

  • ? 单个任意字符,不能匹配空格
# 创建测试数据
touch a.txt b.txt cd.txt 'e f.txt'

# 输出: a.txt. b.txt
ls ?.txt

# 输出: cd.txt
ls ??.txt
  • * 任意多个字符,可以匹配空格

适用以带有前缀或者后缀的名称的文件或目录名

# 创建测试数据
touch a.txt b.txt cd.txt 'e f.txt'

# 输出:a.txt b.txt cd.txt 'e f.txt'
ls *.txt
  • [] 方括号中任意字符
# 创建测试数据
touch a.txt b.txt cd.txt ce.txt cef.txt

# 输出:a.txt  b.txt
ls [ab].txt
  • [^][!] 非方括号内任意字符
# 创建测试数据
touch a.txt b.txt cd.txt ce.txt cef.txt

# 输出:cd.txt   cef.txt   ce.txt  'e f.txt'
ls [^ab]*.txt 

# 等价
ls [!ab]*.txt 
  • {} 匹配大括号里任意一个模式
# 创建测试数据
touch a.txt b.txt cd.txt ce.txt cef.txt

# 输出:a.txt  b.txt
ls ls {a,b}.txt

# 输出:cd.txt  ce.txt
ls c{d,e}.txt
  • {start..end} 匹配一个连续范围的字符
# 输出:a.txt b.txt c.txt d.txt
echo {a..d}.txt

2. 通配符执行过程

命令行会首先解释通配符,然后作为命令行的参数交给命令执行

  • 通配符没有匹配到文件或者目录名,会原样输出
# 该目录下没有匹配名称的文件名,输出:ls: 无法访问 'tests*': 没有那个文件或目录
ls [adc]?.txt
  • 不能匹配路径分隔符 /
# 创建测试数据
mkdir tests

#输出:ls: 无法访问 'tests*': 没有那个文件或目录
ls tests*
  • 使用单引号包裹通配符变成普通字符
# 输出:ls: 无法访问 '?.txt': 没有那个文件或目录
ls '?.txt'
posted @ 2024-01-25 21:55  梦_鱼  阅读(26)  评论(0编辑  收藏  举报