我想写一个gulp任务,其中一个文件夹中的所有文件都被移动到另一个文件夹,使用数字重命名。
到目前为止我完成了这项任务:
var index = 0;
gulp.task("jpg", function () {
return gulp.src('img/new/**.{jpg,JPG}')
.pipe(chmod(666))
.pipe(rename(function (path) {
path.basename = (index++);
path.dirname += "/full_size";
path.extname = ".jpg";
return path;
}))
.pipe(gulp.dest('img/gallery'));
});
我想知道如何编写脚本来检查文件夹中已有的最高编号,并相应地更新var索引,这样文件就不会被覆盖。
答案 0 :(得分:2)
随着吞咽我几乎没有经验。我想它可以更有效地完成。我尝试了另一个目录结构,它适用于我。 首先,您必须要求文件系统模块,因此将其放在gulp文件的顶部:
const fs = require('fs');
以下是修改后的gulp任务:
/**
* Gulp task edited by Georgi Naumov
* gonaumov@gmail.com for contacts
* and suggestions.
*/
gulp.task("jpg", function () {
var files = fs.readdirSync('img/gallery/full_size/'), index = 0;
// here we will find maximum number of index
// keep in mind that this is very inefficient.
files.forEach(function (currentFile) {
var currentIndex = (/^([0-9]+)\.jpg$/i.exec(currentFile) || [, false])[1];
if (currentIndex && parseInt(currentIndex) >= index) {
index = ++currentIndex;
}
});
return gulp.src('img/new/**.{jpg,JPG}')
.pipe(chmod(666))
.pipe(rename(function (path) {
path.basename = (index++);
path.dirname += "/full_size";
path.extname = ".jpg";
return path;
}))
.pipe(gulp.dest('img/gallery'));
});
如果在这种情况下性能很重要,我们可以执行shell命令,该命令可以获取具有最大编号的文件,但该任务将不再是平台无关的。
编辑:
我认为隔离逻辑以找到包中的最大数量是一个好主意。所以我刚刚发布了npm包。您可以安装和使用它。
安装时必须使用:
npm install --save npm-max-dir-index
在此之后你可以这样使用它:
const maxDirIndex = require('npm-max-dir-index');
/**
* Gulp task edited by Georgi Naumov
* gonaumov@gmail.com for contacts
* and suggestions.
*/
gulp.task("jpg", function () {
var index = maxDirIndex('img/gallery/full_size/', '^([0-9]+)\.jpg$');
return gulp.src('img/new/**.{jpg,JPG}')
.pipe(chmod(666))
.pipe(rename(function (path) {
path.basename = (index++);
path.dirname += "/full_size";
path.extname = ".jpg";
return path;
}))
.pipe(gulp.dest('img/gallery'));
});
这里可以阅读包文档(我刚刚更新了文档):