code: function walk(files, cb, list) {
      var i = 0;
      list = list || [];
  
      function check(file, cb) {
        fs.stat(file, function onStat(err, stats) {
          if(err) return cb(err);
          if(stats.isFile() && !/\.js$/.test(file)) {
            log.warning('ignoring %s', file);
            return cb();
          }
          if(stats.isFile()) {
            list.push(file);
            return cb(null, list);
          }else{
            return fs.readdir(file, function onRead(err, files) {
              if(err) return cb(err);
              if(!files.length) return cb();
              files = files.map(function(nm) {
                return path.join(file, nm);
              })
              //files.forEach()
              return walk(files, cb, list);
            })
          }
        });
      }
  
      check(files[i], function onCheck(err, list) {
        if(err) return cb(err);
        if(i === files.length - 1) {
          return cb(null, list);
        }
        i++;
        check(files[i], onCheck);
      });
    }
docs: Walk the file list array.