fs.extra

fs.move and fs.copy for Node.JS

fs.extra

Extra file utilities for node.js

Includes

  • copy
  • copyRecursive
  • mkdirp
  • move
  • walk
  • rmrf

Install

npm install --save fs.extra

Usage

// this will have all of a copy of the normal fs methods as well 
var fs = require('fs.extra');

fs.copy

Creates an fs.readStream and fs.writeStream and uses util.pump to efficiently copy.

fs.copy('foo.txt', 'bar.txt', { replace: false }, function (err) {
  if (err) {
    // i.e. file already exists or can't write to directory 
    throw err;
  }
 
  console.log("Copied 'foo.txt' to 'bar.txt');
});

Options are optional. replace defaults to false, but will replace existing files if set to true.

fs.copyRecursive

Basically a local rsync, uses fs.copy to recursively copy files and folders (with correct permissions).

fs.copyRecursive('./foo', './bar', function (err) {
  if (err) {
    throw err;
  }
 
  console.log("Copied './foo' to './bar');
});

fs.mkdirRecursive

Included from https://github.com/substack/node-mkdirp

// fs.mkdirp(path, mode=(0777 & (~process.umask())), cb); 
 
fs.mkdirp('/tmp/foo/bar/baz', function (err) {
  if (err) {
    console.error(err);
  } else {
    console.log('pow!')
  }
});

fs.mkdirRecursiveSync

Included from https://github.com/substack/node-mkdirp

// fs.mkdirpSync(path, mode=(0777 & (~process.umask()))); 
 
try {
  fs.mkdirpSync('/tmp/foo/bar/baz');
} catch(e) {
  throw e;
}

fs.move

Attempts fs.rename, then tries fs.copy + fs.unlink before failing.

fs.move('foo.txt', 'bar.txt', function (err) {
  if (err) {
    throw err;
  }
 
  console.log("Moved 'foo.txt' to 'bar.txt');
});

fs.rmRecursive

Included from https://github.com/jprichardson/node-fs-extra

Recursively deletes a directory (like rm -rf)

// fs.rmrf(dir, callback); 
 
fs.rmrf('/choose/me/carefully/', function (err) {
  if (err) {
    console.error(err);
  }
});

fs.rmRecursiveSync

Included from https://github.com/jprichardson/node-fs-extra

Recursively deletes a directory (like rm -rf)

// fs.rmrfSync(dir); 
 
fs.rmrfSync('/choose/me/carefully/');

fs.walk

See https://github.com/coolaj86/node-walk

var walker = fs.walk(dir)
  ;
 
// file, files, directory, directories 
walker.on("file", function (rootstatnext) {
  var filepath = path.join(root, stat.name)
    ;
 
  console.log(filepath);
});

Aliases and Backwards Compatibility

For the sake of backwards compatability, you can call the recursive functions with their names as such

fs.remove <- fs.rmRecursive <- fs.rmrf
fs.removeSync <- fs.rmRecursiveSync <- fs.rmrfSync
fs.mkdirRecursive <- fs.mkdirp
fs.mkdirRecursiveSync <- fs.mkdirpSync

License

Copyright AJ ONeal 2011-2015

This project is available under the MIT and Apache v2 licenses.

  • http://www.opensource.org/licenses/mit-license.php
  • http://www.apache.org/licenses/LICENSE-2.0.html