Skip to content

Instantly share code, notes, and snippets.

@joseluisq
Forked from geedew/node-rm-rf-async.js
Last active September 18, 2017 17:56
Show Gist options
  • Save joseluisq/3b97b4ef377c50993099 to your computer and use it in GitHub Desktop.
Save joseluisq/3b97b4ef377c50993099 to your computer and use it in GitHub Desktop.
NodeJS: Remove async directory that is not empty
// http://www.geedew.com/remove-a-directory-that-is-not-empty-in-nodejs/
var fs = require('fs');
var rmdirAsync = function(path, callback) {
fs.readdir(path, function(err, files) {
if (err) {
// Pass the error on to callback
callback(err, []);
return;
}
var wait = files.length,
count = 0,
folderDone = function(err) {
count++;
// If we cleaned out all the files, continue
if (count >= wait || err) {
fs.rmdir(path, callback);
}
};
// Empty directory to bail early
if (!wait) {
folderDone();
return;
}
// Remove one or more trailing slash to keep from doubling up
path = path.replace(/\/+$/, "");
files.forEach(function(file) {
var curPath = path + "/" + file;
fs.lstat(curPath, function(err, stats) {
if (err) {
callback(err, []);
return;
}
if (stats.isDirectory()) {
rmdirAsync(curPath, folderDone);
} else {
fs.unlink(curPath, folderDone);
}
});
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment