【问题标题】:How can I use a glob to ignore files that start with an underscore?如何使用 glob 忽略以下划线开头的文件?
【发布时间】:2015-02-25 16:01:38
【问题描述】:

我在 gulp 中使用这个文件匹配:

'content/css/*.css'

但我只想包含以下划线开头的文件。谁能告诉我该怎么做?

代码如下:

gulp.task('less', function () {
    gulp.src('content/less/*.less')
        .pipe(less())
        .pipe(gulp.dest('content/css'));
});

【问题讨论】:

  • 这看起来不像是一个正则表达式,它看起来像一个文件名通配符。
  • 我认为它在 gulp 中被称为 glob,但我对此有点困惑。
  • 在shell中也是这么称呼的。

标签: gulp glob


【解决方案1】:

如果 Gulp 通配符类似于 shell 通配符:

content/css/[^_]*.css

字符集开头的^ 表示匹配集合中的任何字符。

【讨论】:

    【解决方案2】:

    您可以添加第二个 glob whitch 将过滤带有下划线的文件或文件夹。

    对于我使用的忽略文件夹:

    gulp.src(['./src/**/*.html', '!**/_*/**'])
    

    '!**/_*/**' 将过滤以下划线开头的文件夹。

    【讨论】:

      【解决方案3】:

      使用这个插件https://github.com/robrich/gulp-ignore

      var gulpIgnore = require('gulp-ignore');
      var condition = '_*.css'; //exclude condition
      
      gulp.task('less', function() {
        gulp.src('content/less/*.less')
          .pipe(gulpIgnore.exclude(condition))
          .pipe(less())
          .pipe(gulp.dest('/dist/'));
      });
      

      我认为 gulp 支持文件 glob not full-regex,但是你可以试试content/css/[^_]*.less

      【讨论】:

      • 我对您的新建议非常开放,但您能否查看我更新的问题,我在其中显示正在使用的代码。我认为我的版本可能会更简单一些,因为它不需要 gulp-ignore。我欢迎你们的cmets。谢谢
      • 检查更新后的帖子,但您的代码包含所有以 .less 结尾的文件 我不确定 gulp 默认是否支持文件名中的完整正则表达式!!
      【解决方案4】:

      你可以使用这个正则表达式。

      content/css/[^_].*\.css
      

      如有必要,在最后添加$

      【讨论】:

      • 你能告诉我中间的“.*\”在这里是做什么的吗?我也在寻找不以下划线开头的文件。
      • [^_] 匹配文件名的第一个字母,但前提是它不是下划线。所以下面的.* 非贪婪地匹配任何字符,它也匹配下划线。最后的 .css 断言文件名必须以 .css` 结尾
      【解决方案5】:

      对于那些使用 Python(像我一样来自 Google)的人,正确的应该是:

      import glob
      glob.glob('content/css/[!_]*.css')
      

      【讨论】:

        猜你喜欢
        • 2016-04-06
        • 2016-03-30
        • 2017-09-10
        • 2016-01-14
        • 1970-01-01
        • 2014-01-01
        • 2012-05-05
        • 1970-01-01
        • 2018-09-13
        相关资源
        最近更新 更多