Skip to content

Instantly share code, notes, and snippets.

@shlomiassaf
Forked from AndrewRayCode/gist:825583
Created August 20, 2014 18:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shlomiassaf/43e61b0d7474dbbd7123 to your computer and use it in GitHub Desktop.
Save shlomiassaf/43e61b0d7474dbbd7123 to your computer and use it in GitHub Desktop.
function readDir(start, callback) {
// Use lstat to resolve symlink if we are passed a symlink
fs.lstat(start, function(err, stat) {
if(err) {
return callback(err);
}
var found = {dirs: [], files: []},
total = 0,
processed = 0;
function isDir(abspath) {
fs.stat(abspath, function(err, stat) {
if(stat.isDirectory()) {
found.dirs.push(abspath);
// If we found a directory, recurse!
readDir(abspath, function(err, data) {
found.dirs = found.dirs.concat(data.dirs);
found.files = found.files.concat(data.files);
if(++processed == total) {
callback(null, found);
}
});
} else {
found.files.push(abspath);
if(++processed == total) {
callback(null, found);
}
}
});
}
// Read through all the files in this directory
if(stat.isDirectory()) {
fs.readdir(start, function (err, files) {
total = files.length;
for(var x=0, l=files.length; x<l; x++) {
isDir(path.join(start, files[x]));
}
});
} else {
return callback(new Error("path: " + start + " is not a directory"));
}
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment