var fs = require("fs"); var path = require("path"); var walk = function (start, callback) { fs.lstat(start, function (err, stat) { if (err) return callback(err) if (stat.isDirectory() && !stat.isSymbolicLink()) { fs.readdir(start, function (err, files) { if (err) return callback(err) var dirs = [] , notDirs = [] , IL = files.length for (i = 0; i < IL; i++) { var abspath = path.join(start, files[i]); var _stat = fs.lstatSync(abspath); if (_stat.isDirectory() && !_stat.isSymbolicLink()) { dirs.push(abspath); walk(abspath, callback); } else { notDirs.push(abspath); } } return callback(null, start, dirs, notDirs); }); } else { return callback(new Error("path: " + start + " is not a directory")); } }); };