48

特定のディレクトリについて、Node.JSでファイルのリストを時系列(日付変更順)で取得するにはどうすればよいですか? ファイル システムのドキュメントには何も表示されませんでした。

4

5 に答える 5

101

これを試してみてください。

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();
           });

メソッドの「同期」バージョンを使用しました。必要に応じて非同期にする必要があります。(たぶんその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; });
于 2012-05-11T23:32:01.100 に答える
14

2021 年、fs.promises を使用した async/await

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

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

(async () => {
  try {
    const dirpath = __dirname;
    console.log(await readdirChronoSorted(dirpath));
    console.log(await readdirChronoSorted(dirpath, -1));
  } catch (err) {
    console.log(err);
  }
})();
于 2018-07-04T18:40:01.460 に答える
0

並べ替えに使用する統計を説明する機会を与えるため、アンダースコアを使用することになりました。

最初に使用してディレクトリ内のファイルを取得しますfiles = fs.readFileSync(directory);(ディレクトリが存在しない場合、または読み取り権限がある場合は、エラーをキャッチしてみてください)

次に、それらを次のような関数に渡します。これにより、順序付きリストが返されます。

function orderByCTime(directory, files) {
    var filesWithStats = [];
    _.each(files, function getFileStats(file) {
        var fileStats = fs.statSync(directory + file);

        filesWithStats.push({
            filename: file,
            ctime: fileStats.ctime
        });
        file = null;
    });
    return _.sortBy(filesWithStats, 'ctime').reverse();
}

デフォルトでは、アンダースコアは昇順で並べ替えます。降順で必要なので逆にします。

別の統計でソートすることもできます (ノード fs のドキュメントはこちらで確認してください)。ファイルに「触れる」ことも考慮する必要があるため、ctimeを使用することにしました。

希望が助け、

于 2015-09-04T15:03:11.033 に答える
-3

試しましたfs.readdir()か?

http://nodejs.org/docs/v0.3.1/api/fs.html#fs.readdir

于 2012-05-11T23:19:30.073 に答える