Node.js:指定要用zlib + tar解压缩的文件

安装过程是下载.tar.gz压缩文件,然后将文件解压到目标目录。 但是,并非所有文件都是必需的,我想指定哪些文件应该被提取。 天真的方法是删除提取后的不必要的文件,但我想要一个“干净”的方式,而不是过滤。

这可能吗?

(相关的)代码到目前为止(为了便于阅读)

 var fs = require('fs'); var tar = require('tar'); var zlib = require('zlib'); var log = console.log; var tarball = 'path/to/downloaded/archive.tar.gz'; var dest = 'path/to/destination'; fs.createReadStream(tarball) .on("error", log) .pipe(zlib.Unzip()) .pipe(tar.Extract({ path: dest })) .on("end", log); 

谢谢。

它的作用类似于unzip模块:

 var fs = require('fs'); var tar = require('tar'); var zlib = require('zlib'); var path = require('path'); var mkdirp = require('mkdirp'); // used to create directory tree var log = console.log; var tarball = 'path/to/downloaded/archive.tar.gz'; var dest = 'path/to/destination'; fs.createReadStream(tarball) .on('error', log) .pipe(zlib.Unzip()) .pipe(tar.Parse()) .on('entry', function(entry) { if (/\.js$/.test(entry.path)) { // only extract JS files, for instance var isDir = 'Directory' === entry.type; var fullpath = path.join(dest, entry.path); var directory = isDir ? fullpath : path.dirname(fullpath); mkdirp(directory, function(err) { if (err) throw err; if (! isDir) { // should really make this an `if (isFile)` check... entry.pipe(fs.createWriteStream(fullpath)); } }); } }); 

你可以看看这个postfind一个好的解决scheme。

顺便说一下,在zlib文档中,您将看到可以指定一个调用.unzip()的“缓冲区”。