Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Colorfulstan/312d5f77187570245c9c654d39f9bdc6 to your computer and use it in GitHub Desktop.
Save Colorfulstan/312d5f77187570245c9c654d39f9bdc6 to your computer and use it in GitHub Desktop.
recursive read directory in node.js returning flattened list of files and directories
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