glob 模式的 Linux Shell 通配符介绍
问题
今天遇到一个麻烦,如何在编译器中设置 "files.exclude",排除掉某些我们不愿意看的文件呢?查阅资料得知这种字段的填写就需要用到 glob 模式的通配符。
概念
glob 模式(globbing)也被称之为 shell 通配符,名字的起源来自于 Unix V6 中的 /etc/glob (详见 man 文档)。glob 是一种特殊的模式匹配,最常见的是通配符拓展,也可以将 glob 模式设为精简了的正则表达式,在最新的 CentOS 7 中已经删除了 glob 的相关描述文档,删除的原因由于 glob 已经整合到了 shell 之中,然后就有了 shell 通配符。
笔者在查阅资料的时候发现关于 glob 模式或者 globbing 的相关描述以及文档是少之又少,所以特地在这里整理一下并重新写一写使用方法
语法
* 匹配任意长度任意字符
? 匹配任意单个字符
[list] 匹配指定范围内(list)任意单个字符,也可以是单个字符组成的集合
[^list] 匹配指定范围外的任意单个字符或字符集合
[!list] 同[^list]
{str1,str2,...} 匹配 srt1 或者 srt2 或者更多字符串,也可以是集合
专用字符集
[:alnum:] 任意数字或者字母
[:alpha:] 任意字母
[:space:] 空格
[:lower:] 小写字母
[:digit:] 任意数字
[:upper:] 任意大写字母
[:cntrl:] 控制符
[:graph:] 图形
[:print:] 可打印字符
[:punct:] 标点符号
[:xdigit:] 十六进制数
[:blank:] 空白字符(未验证)
例子
匹配当前文件夹下的 node_modules 下的所有文件
"./node_modules/*": true
拿 vscode 设置中的 "files.exclude" 举例,如果我希望不显示 node_modules 下的公司内部的包 @souche-f2e 和 @souche-vue ,也显示 vue 全家桶,其他包全都隐藏,则:
"files.exclude": {
"./node_modules/[^@v]*": true
}