安装过程正在下载.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)); } }); } });