Node.js - ディレクトリのファイルリストを取得する

特定のディレクトリサブのすべてのフォルダとファイルのリストを取得する方法を紹介します。

1. fs.readdir() を使った方法

fs.readdir(path, callback) は path のサブファイルとディレクトリのリストを非同期的に取得します。結果は callback に渡されます。

const fs = require('fs');

fs.readdir("/var", (err, files) => {
  if (err) {
    throw err;
  }
  files.forEach(file => {
    console.log(file);
  });
});

Output:

cache
crash
lib
local
lock
log
mail
metrics
opt
run
snap
spool
test.txt
tmp
www

実際に /var のサブフォルダとファイルを確認すると、上記と一致します。

$ ls /var
cache  crash  lib  local  lock  log  mail  metrics  opt  run  snap  spool  test.txt  tmp  www

1.1 file type 一緒に出力

fs.readdir(path, options, callback) は option も引数として受け取ります。

const fs = require('fs');

fs.readdir("/var/", { withFileTypes: true }, (err, files) => {
  if (err) {
    throw err;
  }
  files.forEach(file => {
    console.log(file);
  });
});

Output:

Dirent { name: 'cache', [Symbol(type)]: 2 }
Dirent { name: 'crash', [Symbol(type)]: 2 }
Dirent { name: 'lib', [Symbol(type)]: 2 }
Dirent { name: 'local', [Symbol(type)]: 2 }
Dirent { name: 'lock', [Symbol(type)]: 3 }
Dirent { name: 'log', [Symbol(type)]: 2 }
Dirent { name: 'mail', [Symbol(type)]: 2 }
Dirent { name: 'metrics', [Symbol(type)]: 2 }
Dirent { name: 'opt', [Symbol(type)]: 2 }
Dirent { name: 'run', [Symbol(type)]: 3 }
Dirent { name: 'snap', [Symbol(type)]: 2 }
Dirent { name: 'spool', [Symbol(type)]: 2 }
Dirent { name: 'test.txt', [Symbol(type)]: 1 }
Dirent { name: 'tmp', [Symbol(type)]: 2 }
Dirent { name: 'www', [Symbol(type)]: 2 }

2. fs.readdirSync() を使った方法

fs.readdirSync(path) は path 子のファイルとフォルダのリストを同期的な方法で取得します。

const fs = require('fs');

const files = fs.readdirSync("/var/");

files.forEach(file => {
  console.log(file);
});

上記と同様に、 fs.readdirSync(path, option) で option を渡してファイルタイプを出力できます。

const fs = require('fs');

const files = fs.readdirSync("/var/", { withFileTypes: true });

files.forEach(file => {
  console.log(file);
});
codechachaCopyright ©2019 codechacha