获取文件夹中的最新文件

时间:2014-04-23 03:55:16

标签: node.js

我有像

这样的文件夹结构
var/ 
    testfolder1/
                myfile.rb
                data.rb
    testfolder2/ 
               home.rb
                sub.rb
    sample.rb
    rute.rb

inside var文件夹包含子文件夹(testfolder1,testfolder2)和一些文件(sample.rb,rute.rb) 在下面的代码中,返回包含var文件夹中的文件夹和文件的josn对象 喜欢

{
    '0': ['sample.rb', 'rute.rb'],
    testfolder1: ['myfile.rb',
        'data.rb',
    ],
    testfolder2: ['home.rb',
        'sub.rb',
    ]

}

 var scriptsWithGroup = {};
    fs.readdir('/home/var/', function(err, subfolder) {
      if(err) return context.sendJson({}, 200);
      var scripts = [];
      for (var j = 0; j < subfolder.length; j++) {
        var scriptsInFolder = [];
        if(fs.lstatSync(scriptPath + subfolder[j]).isDirectory()) {
          fs.readdirSync(scriptPath + subfolder[j]).forEach(function(file) { 
            if (file.substr(file.length - 3) == '.rb')
            scriptsInFolder.push(file);
          });
          scriptsWithGroup[subfolder[j]] = scriptsInFolder;
        } else {
          if (subfolder[j].substr(subfolder[j].length - 3) == '.rb')
            scripts.push(subfolder[j]);
        }
      }
      scriptsWithGroup["0"] = scripts;

console.log(scriptsWithGroup)
      context.sendJson(scriptsWithGroup, 200);
    });

我需要的是我想要返回最新修改或创建的文件。我只在文件夹中使用2个文件,它包含大量文件。所以我想返回最新创建的文件

2 个答案:

答案 0 :(得分:0)

我将在此假设您只想 最近的两个文件。如果你真的想要它们,只需要排序,只需删除它的slice部分:

scriptsInFolder = scriptsInFolder.sort(function(a, b) {
  // or mtime, if you're only wanting file changes and not file attribute changes
  var time1 = fs.statSync(a).ctime; 
  var time2 = fs.statSync(b).ctime;
  if (time1 < time2) return -1;
  if (time1 > time2) return 1;
  return 0;
}).slice(0, 2);
但是,我会补充一点,它通常被认为是不使用同步fs方法的最佳做法(例如fs.statSync)。如果您能够安装async,那将是一个不错的替代方法。

答案 1 :(得分:0)

const fs = require('fs');
const path = require('path');

const getMostRecentFile = (dir) => {
    const files = orderReccentFiles(dir);
    return files.length ? files[0] : undefined;
};

const orderReccentFiles = (dir) => {
    return fs.readdirSync(dir)
        .filter(file => fs.lstatSync(path.join(dir, file)).isFile())
        .map(file => ({ file, mtime: fs.lstatSync(path.join(dir, file)).mtime }))
        .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
};

const dirPath = '<PATH>';
console.log(getMostRecentFile(dirPath));