安装过程正在下载.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);
谢谢。
答案 0 :(得分:13)
它类似于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));
}
});
}
});
答案 1 :(得分:0)
您可以查看this post以找到一个好的解决方案。
顺便说一下,在zlib-documentation中你会看到你可以指定一个叫“缓冲区”来调用.unzip()。