在globbing中dir / *,dir / **,dir / ** / *,dir /**/*.*之间有什么区别?

时间:2014-11-09 04:16:40

标签: javascript gulp glob

想象一下以下目录结构:

web/
  sub1/
    1.js
  3.js

当我使用' del'节点模块删除文件或目录的行为 dir/* , dir/**, dir/**/*, dir/**/*.*不同。

web/*

del([' web/*','!web / sub1 / 1.js'])
- > web /下的所有内容都被删除,web / sub1 / 1.js也被删除了 del([' web/*','!web / 3.js']})
- >除了3.js之外,web /下的所有内容都被删除了

web/**

del([' web/**','!web / sub1 / 1.js']),del([' web/** ','!web / 3.js'])
- >两种形式的结果是相同的,web /被完全删除

web/**/*

del([' web/**/*','!web / sub1 / 1.js'])
  - > web /下的所有内容都被删除了  del([' web/**/*','!web / 3.js']})
  - >除了3.js之外,web /下的所有内容都被删除了

web/**/*.*

del([' web/**/*.*','!web / sub1 / 1.js'])
- >除了web / sub / 1.js之外,web /下的所有文件都被删除,并保留了目录结构 del([' web/**/*.*','!web / 3.js']})
- >除了3.js之外,web /下的所有文件都被删除了,目录结构保持不变

完成上述测试后,我完全感到困惑,我无法总结上述测试中的规则。我无法找到解释这些内容的详细文档。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

节点del使用node-glob来匹配目标,使用rimraf来移除匹配的目标。所有匹配的目标将传递给rimraf,rimraf将删除文件或递归删除目录。因此,您的问题的答案是您的模式匹配哪些目标。

  

幅/ *

所有子项都匹配:web/sub1web/3.js。所有内容都将被删除,!web/sub1/1.js不会排除任何内容。但是!web/3.js会排除该文件,因此只会递归删除web/sub1

  

幅/ **

目录和所有嵌套项匹配:webweb/sub1web/sub1/1.jsweb/3.js。由于目录将以递归方式删除,因此任何文件排除都无效。

  

幅/ ** / *

匹配所有嵌套项:web/sub1web/sub1/1.jsweb/3.jsweb/sub1将以递归方式删除,排除!web/sub1/1.js无关紧要。但是排除!web/3.js会保留文件。

  

幅/**/*.*

仅匹配嵌套文件:web/sub1/1.jsweb/3.js。因此,不会删除任何目录,并且排除文件会保留它。