如何stream在node.js读取目录?

假设我有一个包含100K +甚至500k +文件的目录。 我想用fs.readdir读取目录,但是它不是stream。 有人告诉我,在完成读取整个文件列表之前,asynchronous使用内存。

那么解决scheme是什么? 我想readdir与stream的方法。 我可以吗?

在现代计算机中,遍历500K文件的目录是没有用的。 当你在Node.js中asynchronousfs.readdir ,它只是读取指定目录中的文件名列表。 它不读取文件的内容。 我刚刚testing了在目录中的700K文件。 它只需要21MB的内存来加载这个文件名列表。

一旦你加载了这个文件名列表,你可以通过设置一些并发限制来逐个或者并行地遍历它们,并且你可以很容易地把它们全部消耗掉。 例:

 var async = require('async'), fs = require('fs'), path = require('path'), parentDir = '/home/user'; async.waterfall([ function (cb) { fs.readdir(parentDir, cb); }, function (files, cb) { // `files` is just an array of file names, not full path. // Consume 10 files in parallel. async.eachLimit(files, 10, function (filename, done) { var filePath = path.join(parentDir, filename); // Do with this files whatever you want. // Then don't forget to call `done()`. done(); }, cb); } ], function (err) { err && console.trace(err); console.log('Done'); });