recursive-readdirのリポジトリはこちら:https://www.npmjs.com/package/recursive-readdir

パッケージをインストール

npm install recursive-readdir

使い方:

const recursive = require('recursive-readdir');
recursive(process.cwd(), [], (err, files) => {
    if (err) return console.error(err);
    console.log(files);
});

活用例

フォルダ内の画像ファイルを_thumbという接尾詞追加する:

この例ではasyncを使ってるので、npm install asyncでインストールしてください

const async = require('async');
const path = require('path');
const fs = require('fs');
const recursive = require('recursive-readdir');

const image_ext = ['.jpg', '.png', '.jpeg', '.gif']; // 画像拡張子

recursive(process.cwd(), [], (err, files) => {
    if (err) return console.error(err);
    // 画像だけ抽出
    const images = files.filter(v => {
        const ext = path.extname(v); // 拡張子取得
        return image_ext.indexOf(ext) > 0;
    });

    // 非同期でファイルリネームする
    async.series(images.map(img => {
        const ext = path.extname(img);
        const basename = path.basename(img, ext);
        const dirname = path.dirname(img);
        const to_name = path.join(dirname, basename + '_thumb' + ext);
        return (done) => fs.rename(img, to_name, done);
    }),  (err) => {
        if (err) return console.error(err);
        console.log('done');
    });
});

recursive-readdirのコールバックはファイルの絶対パスとなる。一方、node.jsのAPI fs.readdirは相対パスとなるので、要注意。