glob node.js下可以像shell模式一样匹配文件
文章目录
前言
早期 Unix (第 1-6 版,1969-1975)的命令行解释器依赖独立程序 /etc/glob 展开参数中的通配符。
这个程序会展开通配符并把展开后的文件列表传给命令。
它的名字是 "global command" 的简称。
后来这个功能由工具函数 glob() 提供,被 shell 等程序使用。 -- 维基百科
python语言中有了golb封装的包,接着有了今天我们看到的JavaScript实现的glob.
Glob可以做什么
它可以根据指定的通配符来匹配文件,并且把匹配到的结果列表返回给你.
安装
npm install glob
用法
var glob = require("glob")
// options 可选
glob("**/*.js", options, function (er, files) {
// files 是一个文件名数组。
// 如果设置了选项 `nonull` 并且没有找到匹配,则 files 是 ["**/*.js"]
// er 是一个错误对象或 null。
})
用法
- 匹配路径片段中零个或多个字符
- ? 匹配一个字符
- [...] 匹配一个字符集合,类似于正则表达式的字符集合。如果第一个字符是 ! 或 ^ 那么它匹配一个不在这个字符集合内的字符。
- !(pattern|pattern|pattern) 匹配不匹配模式的文件。
- ?(pattern|pattern|pattern) 匹配这些模式零次或一次。
- +(pattern|pattern|pattern) 匹配这些模式一次或多次。
- *(a|b|c) 匹配这些模式零次或多次。
- @(pattern|pat*|pat?erN) 匹配这些模式一次。
- ** 即 globstar 模式,如果这是单独的一个路径片断,则匹配零级或多级目录,但不会搜索符号链接目录。
特殊符号(句号)
也许是因为在Unix系统下,
(.)开头的文件或者目录全部是隐藏的,所以(.)符号比较特殊
你的匹配路径是这样假如是这样:
- yjiebuyi//.js 或者 yijiebuyi//*.js
结果里也不会包含.开头的隐藏文件
除非你的匹配路径以(.)开头,那么它只匹配.开头的文件
如:yijiebuyi/./.js
结果:yijiebuyi/.lib/www.js
匹配基本名
如果设置选项 matchBase:true,
并且模式不包含斜杠,那么将搜索目录树下任意地方的匹配基本名(basename)的文件
例如 *.js 匹配
yijiebuyi/blog/basic.js。
hasMagic
判断目录是否包含特殊符号
用法:
glob.hasMagic(pattern, [options])
如果模式包含特殊的字符则返回 true,否则返回 false
异步匹配
glob(pattern, [options], cb)
参数说明
- pattern {String} 待匹配的模式
- options {Object} 参数对象
- cb {Function} 回调函数
- err {Error | null} 错误信息
返回值:matches {Array} 匹配模式的文件名
同步匹配
glob.sync(pattern, [options])
参数说明
- pattern {String} 待匹配的模式
- options {Object}
- return: {Array
} 匹配模式的文件名
进行一个同步的 glob 搜索。