Node.js:指定要用zlib+解压的文件;焦油
安装过程是下载Node.js:指定要用zlib+解压的文件;焦油,node.js,zlib,Node.js,Zlib,安装过程是下载.tar.gz存档文件,然后将文件解压缩到目标目录。但是,并非归档文件中的所有文件都是必需的,我想指定应该提取哪些文件。最天真的方法是在提取后删除不必要的文件,但我想要一种“更干净”的方法,然后过滤掉 这可能吗 到目前为止,我拥有的(相关)代码是(为了可读性而剥离的) 谢谢。您可以查看以找到一个好的解决方案 顺便说一下,在中,您将看到可以指定一个“缓冲区”调用.unzip()。它的工作原理与模块类似: 不,归档文件可能相当大,我不想分配那么多RAM。内存占用必须达到最小值。此外,归
.tar.gz
存档文件,然后将文件解压缩到目标目录。但是,并非归档文件中的所有文件都是必需的,我想指定应该提取哪些文件。最天真的方法是在提取后删除不必要的文件,但我想要一种“更干净”的方法,然后过滤掉
这可能吗
到目前为止,我拥有的(相关)代码是(为了可读性而剥离的)
谢谢。您可以查看以找到一个好的解决方案
顺便说一下,在中,您将看到可以指定一个“缓冲区”调用.unzip()。它的工作原理与模块类似:
不,归档文件可能相当大,我不想分配那么多RAM。内存占用必须达到最小值。此外,归档文件包含目录结构,您的建议不适用。我必须从tar中读取一个提取的文件。什么时候调用read函数?我试过一次,但到那时我的文件还没有写完。您可以在('entry',function(entry){{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){entry.pipe(fs.createWriteStream(fullpath).on('error',function(e){alert('error');}}}}}}}}).on('close',function(){setTimeout(readXMLFile(sysObject.path+'\\layou new.xml'),0)}@rynop捕捉良好,尽管我会在调用
mkdirp()之前执行该检查
.lol ya duh.fixed。此外,我还看到.tar.gz中的文件在解压缩后在磁盘上损坏。您以前见过吗?文件以正确的名称和结构进入磁盘,但文件中的jar已损坏。忽略仅解压缩JS文件行,使用tar.extract()命令这是不可能的happen@rynop我使用了类似的代码来提取tar文件,这对我来说一直都很有效。如果您有一个示例tar文件,我很乐意看一看。@robertklep我很感激:您可以看到我的代码,它正在工作-如果我改为tar.Parse()
并使用您的逻辑,二进制文件就会损坏(不同大小)@rynop这对我来说似乎很好:(请随意在那里而不是这里留下评论:-)
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);
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));
}
});
}
});