In Node.js renaming multiple files recursively is quite a simple task.
We have a series of text files containing HTML code that we want to rename with the appropriate extension. We can write the following code:
'use strict';
const path = require('path');
const fs = require('fs');
const listDir = (dir, fileList = []) => {
    let files = fs.readdirSync(dir);
    files.forEach(file => {
        if (fs.statSync(path.join(dir, file)).isDirectory()) {
            fileList = listDir(path.join(dir, file), fileList);
        } else {
            if(/\.txt$/.test(file)) {
                let name = file.split('.')[0].replace(/\s/g, '_') + '.html';
                let src = path.join(dir, file);
                let newSrc = path.join(dir, name);
                fileList.push({
                    oldSrc: src,
                    newSrc: newSrc
                });
            }
        }
    });
    return fileList;
};
let foundFiles = listDir( './data');
foundFiles.forEach(f => {
   fs.renameSync(f.oldSrc, f.newSrc); 
});
listDir() is a recursive function. If the element found is a directory, it simply keeps on parsing. Otherwise if it's a text file, it collects the current path and the new path into an array of objects.