这是旧的,但詹尼的解决方案对我来说不太适用,也许是因为他正在提取文本文件,我不确定。
此外,您可以通过仅检查一次标题名称而不是检查每个文件记录的每个数据块来进行相当多的优化。
var tar = require('tar-stream');
var fs = require('fs');
var zlib = require('zlib');
var extract = tar.extract();
var chunks = [];
extract.on('entry', function(header, stream, next) {
if (header.name == 'documents.bin') {
stream.on('data', function(chunk) {
chunks.push(chunk);
});
}
stream.on('end', function() {
next();
});
stream.resume();
});
extract.on('finish', function() {
if (chunks.length) {
var data = Buffer.concat(chunks);
fs.writeFile('documents.bin', data);
}
});
fs.createReadStream('archive.tar.gz')
.pipe(zlib.createGunzip())
.pipe(extract);