跳到主要内容

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

· 阅读需 3 分钟
一介布衣
全栈开发者 / 技术写作者
  • 文章目录
  • 前言

  • Glob可以做什么

  • 安装

  • 用法

    • 用法
    • 特殊符号(句号)
    • 匹配基本名
    • hasMagic
    • 异步匹配
    • 同步匹配
  • 前言

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