How to rename files in folder with Node.js

In this article I’m going to show you how to rename all the files in a folder using Node.js.

This article came to be, because I was given a folder of PNG images from a designer with inconsistent file name structure.

For example:


images
  - image_Test1.png
  - backgroundImage-hero.png
  - bacgrkound-Image-Hero-2.png
  - Another-image-file.png

Here’s how I did it.

Solution: Use fs.readdirSync and fs.rename to rename files


const { readdirSync, rename } = require('fs');
const { resolve } = require('path');

// Get path to image directory
const imageDirPath = resolve(__dirname, '[imgs_folder_name]');

// Get an array of the files inside the folder
const files = readdirSync(imageDirPath);

// Loop through each file that was retrieved
files.forEach(file => rename(
  imageDirPath + `/${file}`,
  imageDirPath + `/${file.toLowerCase()}`,
  err => console.log(err)
));

Let’s do a code breakdown.

You’ll need to import 2 utility tools from the fs module from Node.


const { readdirSync, rename } = require('fs');

fs.readdirSync() – Reads the content of a folder synchronously and returns the name of all the files inside the folder in an array format.


// Get path to image directory
const files = readdirSync(path_to_directory);

fs.rename() – Will rename the file from the old path to the new path that it’s given. If the file exists in the new path, it will override the content.


rename(old_path, new_path, callback)

Once the file names are retrieved, and we’ve store the the path to the directory in a variable. I’m going to use an Array.forEach() to loop through each file name so I can rename it as I please.


// Loop through each file that was retrieved
files.forEach(file => {
  const oldPath = imageDirPath + `/${file}`;

  // lowercasing the filename
  const newPath = imageDirPath + `/${file.toLowerCase()}`;

  // Rename file
  rename(
    oldPath,
    newPath,
    err => console.log(err)
  );
});

Pretty easy stuff. Happy coding!

I like to tweet about Node.js and post helpful code snippets. Follow me there if you would like some too!