LoginSignup
13
13

More than 3 years have passed since last update.

【Node.js v11】ディレクトリ内のファイルパスを再帰的に取得するワンライナー

Posted at

ディレクトリ内全てのファイル一覧を取得するというありふれた処理ですがたまたまワンライナーを思いついたのでメモ代わりに紹介します
同期メソッドなので使いどころには注意してください

JavaScript

const fs = require('fs')

const listFiles = (dir) =>
  fs.readdirSync(dir, { withFileTypes: true }).flatMap(dirent =>
    dirent.isFile() ? [`${dir}/${dirent.name}`] : listFiles(`${dir}/${dirent.name}`)
  )

console.log(listFiles('hoge/fuga'))

fs.readdirに withFileTypes: true オプションが追加されてたんですね、最近知りました
https://nodejs.org/api/fs.html#fs_fs_readdirsync_path_options

${dir}/${dirent.name} を2回書くのは良くないので実際に使う場合はワンライナーにこだわらず変数に入れるのがいいです
flatMapを使ってるのでNode.js v11以上じゃないと動きません

TypeScript

import fs from 'fs'

const listFiles = (dir: string): string[] =>
  fs.readdirSync(dir, { withFileTypes: true }).flatMap(dirent =>
    dirent.isFile() ? [`${dir}/${dirent.name}`] : listFiles(`${dir}/${dirent.name}`)
  )

console.log(listFiles('hoge/fuga'))

requireをimportに変えて、引数と返り値に型を指定しただけです

普段はTypeScriptのフレームワークをOSSで開発してるのでTwitterも見ていってください
Twitter@m_mitsuhide

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13