Working with Directories

Create, read, and remove folders with the fs module.

Syntaxawait fs.mkdir(dir, { recursive: true });

The fs module also manages folders (directories):

  • mkdir — create a folder.
  • readdir — list a folder's contents.
  • rmdir / rm — remove a folder.
  • existsSync — check whether a path exists.

Recursive folders

Pass { recursive: true } to mkdir to create nested folders in one call.

Example

Example · javascript
const fs = require('fs/promises');

async function run() {
  await fs.mkdir('output/reports', { recursive: true });
  await fs.writeFile('output/reports/a.txt', 'hi');

  const names = await fs.readdir('output/reports');
  console.log('Files:', names); // ['a.txt']
}
run();

When to use it

  • A scaffolding CLI uses `fs.mkdirSync` with `{ recursive: true }` to create a full project directory tree in one call.
  • A log archiver uses `fs.readdir` to list all files in a log directory, then filters by date to delete old ones.
  • A deployment script uses `fs.rmSync` with `{ recursive: true, force: true }` to wipe a build output folder before regenerating it.

More examples

Create a directory recursively

Uses `fs.mkdirSync` with `{ recursive: true }` to create nested directories in one call without errors if they exist.

Example · js
const fs = require('fs');

// Creates all intermediate directories
fs.mkdirSync('./output/reports/2024', { recursive: true });
console.log('Directory created');

List directory contents

Reads a directory with `withFileTypes: true` to distinguish files from subdirectories without extra `stat` calls.

Example · js
const fs = require('fs/promises');
const path = require('path');

async function listFiles(dir) {
  const entries = await fs.readdir(dir, { withFileTypes: true });
  for (const e of entries) {
    console.log(e.isDirectory() ? '[DIR]' : '[FILE]', e.name);
  }
}
listFiles('.');

Remove a directory tree

Uses `fs.rmSync` with `recursive` and `force` to delete a non-empty directory tree without errors.

Example · js
const fs = require('fs');

// Node 14.14+ -- removes directory and all contents
fs.rmSync('./dist', { recursive: true, force: true });
console.log('dist/ removed');

Discussion

  • Be the first to comment on this lesson.