• 首页
  • nodejs
  • glob node.js下可以像shell模式一样匹配文件

glob node.js下可以像shell模式一样匹配文件

image.png


文章目录



前言

早期 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 搜索。

出自:glob node.js下可以像shell模式一样匹配文件

回到顶部