Node.js – 压缩/解压缩文件夹
我正在深入node.js的Zlib。 我能够使用提供的示例( http://nodejs.org/api/zlib.html#zlib_examples )来压缩和解压缩文件,但是我无法find更多关于对文件夹执行相同操作的内容吗?
一种可能(但我认为是修补)是使用node-zip
模块并逐个添加文件夹的所有文件。 但是当解压缩时我会遇到问题(在这种情况下,我将丢失文件夹)。
任何想法如何使用Node.js压缩(然后解压缩)整个文件夹(尊重子焊料层次结构)?
谢谢。
我终于明白了,在@generalhenry的帮助下(请参阅问题的评论)和
正如评论中提到的那样,我们需要分两步压缩文件夹:
-
将文件夹转换为
.tar
文件 -
压缩
.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,文件系统等)。