使用Node.JS,您如何按时间顺序获取文件列表?

New*_*ang 37 javascript directory node.js

对于给定目录,如何在Node.JS中按时间顺序(按日期修改)获取文件列表?我在文件系统文档中没有看到任何内容.

cli*_*ity 85

试一试.

var dir = './'; // your directory

var files = fs.readdirSync(dir);
files.sort(function(a, b) {
               return fs.statSync(dir + a).mtime.getTime() - 
                      fs.statSync(dir + b).mtime.getTime();
           });
Run Code Online (Sandbox Code Playgroud)

我使用了方法的"同步"版本.您应该根据需要使它们异步.(可能只是readdir部分.)


如果缓存统计信息,您可以稍微提高性能.

var files = fs.readdirSync(dir)
              .map(function(v) { 
                  return { name:v,
                           time:fs.statSync(dir + v).mtime.getTime()
                         }; 
               })
               .sort(function(a, b) { return a.time - b.time; })
               .map(function(v) { return v.name; });
Run Code Online (Sandbox Code Playgroud)


Krz*_*ski 11

异步版(2018)

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

const readdirAsync = util.promisify(fs.readdir);
const statAsync = util.promisify(fs.stat);

async function readdirChronoSorted(dirpath, order) {
  order = order || 1;
  const files = await readdirAsync(dirpath);
  const stats = await Promise.all(
    files.map((filename) =>
      statAsync(path.join(dirpath, filename))
        .then((stat) => ({ filename, stat }))
    )
  );
  return stats.sort((a, b) =>
    order * (b.stat.mtime.getTime() - a.stat.mtime.getTime())
  ).map((stat) => stat.filename);
}

(async () => {
  try {
    const dirpath = path.join(__dirname);
    console.log(await readdirChronoSorted(dirpath));
    console.log(await readdirChronoSorted(dirpath, -1));
  } catch (err) {
    console.log(err);
  }
})();
Run Code Online (Sandbox Code Playgroud)