/**和/*在Grunt中的目录导航方面有何不同?

bat*_*ilc 4 directory wildcard-expansion gruntjs

这对你们来说非常简单,但我找不到这个问题的确定/正式答案.

假设我们在目录A中.然后,

"A/*"可能意味着:直接在A内的每个文件和文件夹.

"A/**"则可能意味着:A中的每个文件和文件夹,以及直接位于A内的每个子项内的每个文件和文件夹.(基本上,/*运算符的扩展遍历根文件夹的更深层) ?又名"/**"="/*/*")

我的"直接内部"术语可能是错误的.可能更好地说"直接孩子"或其他什么,但你明白了.

那么,"A/**/*"是什么意思?它等于"A/*/*/*"吗?

虽然这看起来很基本,但是当我没有运营商的正式定义时,它相当混乱.

我目前正在使用Javascript并尝试修改Gruntfile.但我想这些运营商可能出现在任何情况下.

use*_*740 7

此行为不是固有的JavaScript和是与任何运营商:尽可能的JavaScript而言,它只是一个字符串.

这种全局扩展的处理由特定的库/消费者决定.对于gruntjs,它包含在Grunt Globbing Patterns中:

单独指定所有源文件路径通常是不切实际的,因此Grunt通过内置的node-glob和minimatch库支持文件名扩展(也称为globbing).

  • * 匹配任意数量的字符,但不匹配 /

  • **匹配任意数量的字符,包括/,只要它是路径部分中唯一的东西

所有大多数人都需要知道的是,foo/*.js它将匹配foo /子目录中foo/**/*.js以.js结尾的所有文件,但会匹配foo /子目录及其所有子目录中以.js结尾的所有文件.

因此(但请参阅具体文档!),/**/通常表示"匹配任何深度的目录"和/ /*//*表示"匹配单个目录或文件部分".


gruntjs文档**对标准"/**/*.x"模式的具体机制有点模糊,但是指的是node-glob说:

如果"globstar"(**)在路径部分中唯一的,则它匹配零个或多个目录和子目录以搜索匹配项.它不会抓取符号链接的目录.

[..双星字符]以bsdglob和bash 4.3的方式支持,如果它是路径部分中唯一的东西,则** 只有特殊意义.也就是说,a/**/b会匹配a/x/y/b,但a/**b不会.

利用这些知识,我们得到(作为路径组件当使用时)等价的A/**/fA/f,A/*/f,A/*/*/f,等中间目录的每一个数字.