使用节点搜索高于X的文件夹名称

时间:2014-01-20 11:51:31

标签: javascript node.js fs

我需要使用node.js获取名称高于1.0.0的所有文件夹

我如何通过以下结构实现这一目标。

|---version
    |--1.0.0
    |--1.2.0
    |--0.9.0

谢谢,我对节点很新。

3 个答案:

答案 0 :(得分:2)

如果目录的名称是有效的semver字符串(与您的一样),最简单的方法是使用semver模块并使用gt函数。像这样:

var greater = function (dir, cb){
    var max = null;
    fs.readdir (dir, function (error, entries){
        if (error) return cb (error);
        if (!entries.length) return cb ();
        entries.forEach (function (entry){
            //Suppose there're no files in the directory
            if (!max) return max = entry;
            if (semver.gt (entry, max)) max = entry;
        });
        cb (null, max)
    });
};

greater ("dir", function (error, dir){
    if (error) return handleError (error);
    if (dir){
        //dir is the greater
    }else{
        //No directories
    }
});

答案 1 :(得分:0)

这是同步版本:

var fs = require('fs');

var regex = /^[1-9]\.\d\.\d/;

var folder = __dirname + "/version/";

var files = fs.readdirSync(folder).filter(function(file){

   return regex.test(file) && 
          fs.statSync(folder + file).isDirectory();

})

答案 2 :(得分:0)

修改@Gabriels动态答案以适应。
结束需要一个同步解决方案,在我的grunt init之前插入。 这是最终代码,查找并返回最新文件夹版本的名称。

var getLatest = function (cwd) {
    var max = false;
    var dirs = fs.readdirSync(cwd);

    if (!dirs.length) {
        //No directories
    } else {
        dirs.forEach(function (dir) {
            if (!max) {
                return max = dir;
            }
            if (semver.gt(dir, max)) {
                max = dir;
            }
        });
    }
    return max;
};

getLatest('build/');