Node.js : Specify files to unzip with zlib + tar
安装过程是下载
这可能吗?
我到目前为止拥有的(相关)代码(为便于阅读而被剥离)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); |
谢谢。
它的工作方式类似于
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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)); } }); } }); |
您可以看一下这篇文章,以找到一个好的解决方案。
顺便说一句,在zlib文档中,您将看到可以指定一个调用.unzip()的"缓冲区"。