使用zlib压缩多个文件

下面的代码将压缩一个文件。 我如何压缩多个文件

var gzip = zlib.createGzip(); var fs = require('fs'); var inp = fs.createReadStream('input.txt'); var out = fs.createWriteStream('input.txt.gz'); inp.pipe(gzip).pipe(out); 

你可以使用的东西:

 var listOfFiles = ['firstFile.txt', 'secondFile.txt', 'thirdFile.txt']; function compressFile(filename, callback) { var compress = zlib.createGzip(), input = fs.createReadStream(filename), output = fs.createWriteStream(filename + '.gz'); input.pipe(compress).pipe(output); if (callback) { output.on('end', callback); } } 

#1方法:

 // Dummy, just compress the files, no control at all; listOfFiles.forEach(compressFile); 

#2方法:

 // Compress the files in waterfall and run a function in the end if it exists function getNext(callback) { if (listOfFiles.length) { compressFile(listOfFiles.shift(), function () { getNext(callback); }); } else if (callback) { callback(); } } getNext(function () { console.log('File compression ended'); }); 

Gzip是一种压缩一串数据的algorithm。 它对文件或文件夹一无所知,所以不能自己想做什么。 您可以使用一个归档工具来构build一个归档文件,然后使用gzip压缩构成归档的数据:

另请参阅此答案以获取更多信息: Node.js – 压缩/解压缩文件夹

这个最好的scheme(也是唯一一个仍然保持和妥善logging的)似乎是archiver

 var fs = require('fs'); var archiver = require('archiver'); var output = fs.createWriteStream('./example.tar.gz'); var archive = archiver('tar', { gzip: true, zlib: { level: 9 } // Sets the compression level. }); archive.on('error', function(err) { throw err; }); // pipe archive data to the output file archive.pipe(output); // append files archive.file('/path/to/file0.txt', {name: 'file0-or-change-this-whatever.txt'}); archive.file('/path/to/README.md', {name: 'foobar.md'}); // Wait for streams to complete archive.finalize();