Node.js – 压缩/解压缩文件夹

我正在深入node.js的Zlib。 我能够使用提供的示例( http://nodejs.org/api/zlib.html#zlib_examples )来压缩和解压缩文件,但是我无法find更多关于对文件夹执行相同操作的内容吗?

一种可能(但我认为是修补)是使用node-zip模块并逐个添加文件夹的所有文件。 但是当解压缩时我会遇到问题(在这种情况下,我将丢失文件夹)。

任何想法如何使用Node.js压缩(然后解压缩)整个文件夹(尊重子焊料层次结构)?

谢谢。

我终于明白了,在@generalhenry的帮助下(请参阅问题的评论)和

正如评论中提到的那样,我们需要分两步压缩文件夹:

  1. 将文件夹转换为.tar文件

  2. 压缩.tar文件

为了执行第一步,我需要两个node.js模块:

 npm install tar npm install fstream 

第一个允许我们创build.tar文件。 你可以在这里访问源代码https://github.com/isaacs/node-tar

第二个节点模块将帮助我们读取文件夹并写入文件。 关于基本的fs node.js模块,我不知道是否可以读取一个目录(我不是说要获取数组中的所有文件,使用fs.readdir ,而是处理所有文件及其组织在文件夹中)。

然后,当我将文件夹转换为.tar文件时,我可以使用Zlib Gzip()进行压缩。

这是最后的代码:

 var fstream = require('fstream'), tar = require('tar'), zlib = require('zlib'); fstream.Reader({ 'path': 'path/to/my/dir/', 'type': 'Directory' }) /* Read the source directory */ .pipe(tar.Pack()) /* Convert the directory to a .tar file */ .pipe(zlib.Gzip()) /* Compress the .tar file */ .pipe(fstream.Writer({ 'path': 'compressed_folder.tar.gz' })); /* Give the output file name */ 

这帮助我使用node.js来压缩整个文件夹

2件事情:

  • 正如你所看到的,在tar模块上缺less文档。 我希望这会很快得到改善,因为提供的两个例子讨论了如何从.tar文件中提取内容。

  • 我使用fstream模块来帮助我处理源目录。 这可以绕过使用fs ? 我不知道(请注明,如果你有一个想法)。

您可以使用tar-stream模块创build一个tar归档文件。 它比node-tar更加灵活和简单:

  • 您可以将文件添加到存档(不只是目录,这是node-tar的限制)
  • 它适用于正常的节点文件系统stream(node-tar奇怪地需要使用fstream模块)
  • 其相当完整的logging(节点焦油没有很好的logging)
  • 您可以在不碰到文件系统的情况下创build存档

创buildtar档案,然后使用zlib进行压缩,然后将其写入任何地方(networking,文件系统等)。