欢迎光临散文网 会员登陆 & 注册

Glob Pattern:方便、快捷地查询你项目中的所有文件

2023-08-02 20:12 作者:写代码的宝哥  | 我要投稿

简介

Glob Pattern 是一套查询系统中文件的语法,类似于正则表达式,但又与正则表达式不同。Glob Pattern 最开始起源于 Unix 系统 Shell 命令行脚本。以 cp *.jpg ./thumbnails 举例——这句指令表示复制当前目录内所有以 .jpg 结尾的文件到 thumbnails/ 目录中,语法很简洁。

由于 Glob Pattern 这套匹配文件的语法太好用了,因此各个编程语言都有自己的一套。在前端领域 Node.js 平台,比较有代表性实现包有:globfast-globglobby。不过从下载量上来看,glob 是最受欢迎的,如果你的项目需要用到查询文件的需求,可以优先考虑使用 glob

语法

Glob Pattern 相当于正则表达式,语法没那么复杂,因为 Glob Pattern 的目的很简单,就是为了匹配文件——没有目录什么事。下面我们就来学习下 Glob Pattern 的语法。

  • ?:匹配任意一个字符

  • *:匹配任意长度的字符串

  • /:匹配一个路径分隔符

  • **:这个就比较有意思了,Glob Pattern 中它有个专有名词叫 globstar。一共有两种使用方式:单独(即 **)使用时匹配任意层级下的所有文件;后面跟路径分隔符(即 **/)时,匹配任意层级的目录。/myapp/**.js 是无效用法

  • {a,b}:是一个延展语法,Glob Pattern 中它有个专有名词叫 brace expansion,会讲当前的 Glob Pattern 扩展成多个单独的形式。{} 内有两种分隔符号可以使用,分别是逗号(,)和两点(..)。

  • 比如:**/*.{b,c} 会被扩展为 **/.b**/.c,最终的结果也是这两个 Pattern

  • 比如:**/{a..c} 会被扩展为 **/.a**/.b**/.c

  • !(a|b):一个扩展语法,表示排除(!)圆括号(())里可能的值

练习

以下截图来自 globster.xyz(https://globster.xyz/)站点,这是一个不错的学习 Glob Pattern 语法的在线站点。感兴趣的同学访问尝试下。

我们以这样一个项目结构为例:


**/*.js

匹配项目中的任意 js 文件。

同理,匹配项目中的所有的 png 图片就是 **/*.png

/myapp/config/*

匹配 config/ 目录下的所有文件。


**/*.{png,ico,md}

匹配所有的 png、ico 和 Markdown 文件。

/myapp/src/**/*.ts

匹配 src 目录下所有的 ts 文件。

**/!(*.module).ts

匹配所有的 .ts 文件,但排除以 .module.ts 结尾的文件。

glob 的使用

下面我们简单了解下 glob 包的使用。

安装依赖:

引入 glob 查询方法:

使用:

总结

以上就是关于 Glob Pattern 的所有内容。如果你的工作中有涉及文件查找工作,建议尝试下 glob 下看看,会让你的查找更有效率,代码也更加简洁。



Glob Pattern:方便、快捷地查询你项目中的所有文件的评论 (共 条)

分享到微博请遵守国家法律