我有一个由空文件组成的目录,我想迭代它们的每个名字。但是我有将近2000万个这些空文件并将它们全部加载到内存中fs.readdir
或fs.readdirSync
都会不必要地耗费长时间并吞噬我在系统上的所有内存。
有什么方法可以解决这个问题?
理想情况下,我会寻找以异步方式逐个文件读取的内容,其代码可以重新组合以下内容:
readdirfilebyfile((filename)=>{....})
所以我决不会将整个文件列表保留在内存中。
我正在使用的当前解决方案是将所有文件名转储到一个文件中,然后将其作为数据流读取。然而,这只是摆脱了一个问题,我应该知道如何解决而不诉诸于此。
答案 0 :(得分:0)
这个怎么样? pv是管道查看器,是bash管道的速率限制器。
const spawn = require('child_process').spawn;
const exec = require('child_process').exec;
const tail = spawn('tail -f /tpm/filelist | pv -l -L 10 -q');
tail.stdout.on('data', fileName => {
// parse filenames here
console.log(fileName);
});
exec('ls > /tpm/filelist');