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

时间:2014-12-19 22:11:01

标签: directory gruntjs wildcard-expansion

这对你们来说非常简单,但我无法找到这个问题的明确/正式答案。

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

" A / *"可能意味着:直接在A。

内的每个文件和文件夹

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

我的"直接在"术语可能是错的。可能更好地说"直接孩子"或某事,但你明白了。

然后," A / ** / *"意思?是否等于" A / * / * / *" ?

虽然这看起来很基本,但当我没有对运营商的正式定义时,它会让人感到困惑。

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

2 个答案:

答案 0 :(得分:6)

此行为不是JavaScript固有的,并且与任何运算符相关:就JavaScript而言,它只是一个字符串。

这种全局扩展的处理由特定的库/消费者决定。对于gruntjs,它涵盖在Grunt Globbing Patterns

  

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

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

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

  •   
     

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

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


gruntjs文档对标准**模式中"/**/*.x"的具体机制略显模糊,但引用node-glob说:

  

如果“globstar”(**)在路径部分中单独使用,则它会匹配零个或多个目录以及搜索匹配项的子目录。它不会抓取符号链接的目录。

     

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

使用这些知识,我们得到A/**/fA/fA/*/fA/*/*/f等等的每个中间数的等效性(当用作路径组件时)目录。

答案 1 :(得分:0)

如果您看到A/**/*表示递归搜索文件夹A下每个文件夹的树。有关更多信息,请查找基本的linux样式文件命令。