Node.js-压缩/解压缩文件夹
我正在深入研究node.js的Zlib。我能够使用提供的示例()压缩和解压缩文件,但是我找不到更多关于对文件夹执行相同操作的信息Node.js-压缩/解压缩文件夹,node.js,zlib,Node.js,Zlib,我正在深入研究node.js的Zlib。我能够使用提供的示例()压缩和解压缩文件,但是我找不到更多关于对文件夹执行相同操作的信息 一种可能性(但我认为是修补)是使用节点zip 模块,并逐个添加文件夹的所有文件。但是解压时我会遇到一个问题(在这种情况下,我会丢失文件夹) 知道如何使用Node.js压缩(然后解压缩)整个文件夹(关于子焊料层次结构)吗 谢谢。在@generalhenry的帮助下(参见对问题的评论),我终于得到了它 如评论中所述,我们需要分两步压缩文件夹: 将文件夹转换为.tar文件
一种可能性(但我认为是修补)是使用<代码>节点zip 模块,并逐个添加文件夹的所有文件。但是解压时我会遇到一个问题(在这种情况下,我会丢失文件夹)
知道如何使用Node.js压缩(然后解压缩)整个文件夹(关于子焊料层次结构)吗谢谢。在@generalhenry的帮助下(参见对问题的评论),我终于得到了它 如评论中所述,我们需要分两步压缩文件夹:
.tar
文件.tar
文件npm install tar
npm install fstream
第一个允许我们创建.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压缩整个文件夹
还有两件事:
- 如您所见,缺少关于
模块的文档。我希望这将很快得到改进,因为提供的两个示例讨论了如何从tar
文件中提取内容.tar
- 我使用了
模块来帮助我处理源目录。是否可以使用fstream
绕过此问题?我不知道(如果你有想法,请评论)fs
- 您可以将文件添加到存档(而不仅仅是目录,这是节点tar的一个限制)
- 它适用于普通的节点文件系统流(节点tar奇怪地需要使用fstream模块)
- 它的文档记录非常完整(节点tar没有很好的文档记录)
- 您可以创建一个归档文件,而无需访问文件系统
创建tar归档文件,然后使用zlib压缩它,然后将其写入任意位置(网络、文件系统等)。提供自2013年以来更新的答案 为了获得相同的结果,代码更加简单明了:
const tar = require("tar"); // version ^6.0.1
const fs = require("fs");
tar.c(
{
gzip: true // this will perform the compression too
},
["path/to/my/dir/"]
).pipe(fs.createWriteStream('path/to/my/dir.tgz'));
无需显式使用
zlib
zlib只是一种通信,你想对一个文件夹进行tar,然后对其进行压缩,整个tar.gz的事情,试试看哦,我明白了!因此,我需要分两步完成:1/将文件夹转换为.tar
文件,然后2/使用Zlib将.tar
文件压缩为.tar.gz
。节点tar
模块没有很好的文档记录,您有其他资源吗?我看了一下,我发现最好的是您能提供tar流说明/显示它可以在哪里使用节点文件系统(“fs”)流的文档。我似乎找不到任何东西。我现在已经不习惯使用这个模块了。也许这会有帮助?