Loading

Quipoin Menu

Learn • Practice • Grow

node-js / Renaming & Deleting Files
tutorial

Renaming & Deleting Files

Just like organizing your computer – sometimes you need to rename files to give them better names, and sometimes you need to delete files you no longer need. Node.js makes both operations simple with the File System module.

Renaming Files and Directories

Use `fs.rename()` to change the name of a file or directory. It can also move files between directories.
const fs = require('fs');

<!-- Rename a file -->
fs.rename('oldname.txt', 'newname.txt', (err) => {
  if (err) {
    console.error('Error renaming file:', err);
    return;
  }
  console.log('File renamed successfully');
});

Moving Files (Rename Across Directories)

The same `rename` method can move files to different directories.
<!-- Move file to a different folder -->
fs.rename('./reports/january.csv', './archive/2024/january.csv', (err) => {
  if (err) {
    console.error('Error moving file:', err);
    return;
  }
  console.log('File moved successfully');
});

Renaming Directories

The same method works for directories too.
fs.rename('old-folder', 'new-folder', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Folder renamed');
});

Using Promises for Rename
const fs = require('fs').promises;

async function renameFile(oldPath, newPath) {
  try {
    await fs.rename(oldPath, newPath);
    console.log(`Renamed ${oldPath} to ${newPath}`);
  } catch (err) {
    console.error('Rename failed:', err);
  }
}

renameFile('temp.txt', 'final.txt');

Deleting Files

Use `fs.unlink()` to delete files. (The name `unlink` comes from Unix – removing a file is like unlinking it from the directory.)
fs.unlink('file-to-delete.txt', (err) => {
  if (err) {
    if (err.code === 'ENOENT') {
      console.log('File does not exist');
    } else {
      console.error('Error deleting file:', err);
    }
    return;
  }
  console.log('File deleted successfully');
});

Deleting Directories

Delete empty directory (rmdir):
fs.rmdir('empty-folder', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Directory removed');
});

Delete directory with contents (rm - Node.js v14+):
<!-- Remove directory and all its contents -->
fs.rm('project', { recursive: true, force: true }, (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Project folder removed');
});

Using Promises for Delete Operations
const fs = require('fs').promises;

async function cleanup() {
  try {
    <!-- Delete a file -->
    await fs.unlink('temp.txt');
    console.log('File deleted');
   
    <!-- Delete a directory with contents -->
    await fs.rm('old-logs', { recursive: true });
    console.log('Directory removed');
  } catch (err) {
    console.error('Cleanup failed:', err);
  }
}

cleanup();

Practical Example: File Organizer

Organize files by moving them into folders based on their extensions.
const fs = require('fs').promises;
const path = require('path');

async function organizeDownloads() {
  const downloadFolder = './downloads';
 
  try {
    <!-- Get all files in downloads folder -->
    const files = await fs.readdir(downloadFolder);
   
    for (const file of files) {
      const filePath = path.join(downloadFolder, file);
      const stats = await fs.stat(filePath);
     
      if (stats.isFile()) {
        const ext = path.extname(file).toLowerCase();
        let targetFolder;
       
        if (['.jpg', '.png', '.gif'].includes(ext)) {
          targetFolder = 'images';
        } else if (['.mp4', '.avi', '.mov'].includes(ext)) {
          targetFolder = 'videos';
        } else if (['.pdf', '.doc', '.txt'].includes(ext)) {
          targetFolder = 'documents';
        } else {
          targetFolder = 'other';
        }
       
        const targetPath = path.join(downloadFolder, targetFolder);
       
        <!-- Create target folder if it doesn't exist -->
        try {
          await fs.access(targetPath);
        } catch {
          await fs.mkdir(targetPath);
        }
       
        <!-- Move file -->
        await fs.rename(filePath, path.join(targetPath, file));
        console.log(`Moved ${file} to ${targetFolder}/`);
      }
    }
  } catch (err) {
    console.error('Organization failed:', err);
  }
}

organizeDownloads();

Error Handling Tips

Common errors when renaming/deleting:
  • ENOENT: File/directory doesn't exist
  • EACCES: Permission denied
  • ENOTEMPTY: Directory not empty (with rmdir)
  • EEXIST: Target already exists (rename would overwrite)
fs.rename('source.txt', 'target.txt', (err) => {
  if (err) {
    switch (err.code) {
      case 'ENOENT':
        console.log('Source file does not exist');
        break;
      case 'EACCES':
        console.log('Permission denied');
        break;
      case 'EEXIST':
        console.log('Target file already exists');
        break;
      default:
        console.error('Unknown error:', err);
    }
    return;
  }
  console.log('Success!');
});

Two Minute Drill

  • Use `fs.rename()` to rename files and directories or move them.
  • Use `fs.unlink()` to delete files.
  • Use `fs.rmdir()` for empty directories, `fs.rm()` for directories with contents.
  • Always handle errors – files may not exist or permissions may be wrong.
  • Use promises API for cleaner async/await code.

Need more clarification?

Drop us an email at career@quipoinfotech.com