Shell中如何用Glob匹配后缀数字在指定区间的文件
错误原因
[]是Shell通配符(glob)的单字符匹配规则,仅匹配1个独立字符,括号内定义的是字符集范围,而非数字区间。你写的document[1-10]会被Shell解析为匹配后缀为单个字符0或1的document类文件,无法识别多位数的序号逻辑,这也是会返回document15、document28这类包含字符1的非目标文件的根本原因。
正确匹配方案
方案1:花括号数字扩展(主流Shell通用,写法最简洁)
Bash、Zsh等绝大多数日常使用的Shell都支持数字序列扩展语法,直接写区间即可自动展开为完整文件列表:
du -sh document{1..10}
执行时Shell会自动将document{1..10}展开为document1 document2 document3 ... document10,精准覆盖1到10的所有目标文件,不会产生误匹配。
方案2:拆分通配符(POSIX标准兼容,全Shell环境支持)
如果运行在不支持花括号数字扩展的极简Shell环境,可以拆分匹配规则,分别覆盖单数字序号和双数字序号10:
du -sh document[1-9] document10
规则逻辑:
document[1-9]:匹配document后接1-9单个数字的文件,对应document1到document9document10:精确匹配序号为10的文件
两个规则组合后完全覆盖1-10的目标范围,无任何误匹配风险。
方案3:结合seq命令(适合大跨度数字区间场景)
如果后续需要匹配更大范围的序号(比如1到100),手动写规则效率低,可以结合seq命令自动生成文件名列表:
du -sh $(seq -f "document%g" 1 10)
避坑提示
不要使用带*通配符的模糊规则匹配数字区间,*会匹配任意长度的任意字符,必然会把序号更长的非目标文件包含进结果。
内容的提问来源于stack exchange,提问作者Kusisi Karem
相关产品推荐
相关产品推荐

