我使用this包来递归解压缩给定的tar.gz文件并将它们移动到目的地。下面的计划
var targz = require("tar.gz");
var fs = require("fs");
var s = "/home/user/test.tar.gz";
var d = "/home/user/destination";
var parse;
var readStream;
function extractTar(source, destination) {
targz().extract(source, destination).then(function() {
console.log("extracted " + source);
readStream = fs.createReadStream(source);
parse = targz().createParseStream();
readStream.pipe(parse);
parse.on('entry', function(entry) {
var stringpath = destination+entry.path;
if ((entry.path.length > 6) && entry.path.substr(entry.path.length - 6) === "tar.gz") {
console.log(stringpath, destination);
extractTar(stringpath, destination);
}
else {
var filenameStartsAt = stringpath.lastIndexOf("/");
filename = stringpath.substr(filenameStartsAt+1);
if (filename.length) {
console.log("===="+filename);
fs.rename(stringpath, destination+filename, function(err) {
if (err) {
console.log(err);
}
});
}
}
});
});
}
extractTar(s, d);
如果我的目录中已经存在名为“destination”的文件夹,则此工作正常。如果目标文件夹不存在,则会创建“目标”文件夹,但该文件夹不包含其中的所有解压缩文件。有时甚至没有一个文件。任何人都可以通过任何更好的方式告诉我在这方面做错了什么。