bat*_*ilc 4 directory wildcard-expansion gruntjs
这对你们来说非常简单,但我找不到这个问题的确定/正式答案.
假设我们在目录A中.然后,
"A/*"可能意味着:直接在A内的每个文件和文件夹.
"A/**"则可能意味着:A中的每个文件和文件夹,以及直接位于A内的每个子项内的每个文件和文件夹.(基本上,/*运算符的扩展遍历根文件夹的更深层) ?又名"/**"="/*/*")
我的"直接内部"术语可能是错误的.可能更好地说"直接孩子"或其他什么,但你明白了.
那么,"A/**/*"是什么意思?它等于"A/*/*/*"吗?
虽然这看起来很基本,但是当我没有运营商的正式定义时,它相当混乱.
我目前正在使用Javascript并尝试修改Gruntfile.但我想这些运营商可能出现在任何情况下.
此行为不是固有的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/**/f有A/f,A/*/f,A/*/*/f,等中间目录的每一个数字.