使用序数编号重命名文件 - 从文件夹中的最大数字开始索引

时间:2016-01-25 09:41:01

标签: javascript npm gulp

我想写一个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索引,这样文件就不会被覆盖。

1 个答案:

答案 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'));
});

这里可以阅读包文档(我刚刚更新了文档):

https://www.npmjs.com/package/npm-max-dir-index