node压缩文件夹
前几天遇到一个需求,将一个10G的文件夹打包压缩,并去除黑名单上的文件。
node自带的只能压缩文件。网上看了集中方案要么对大文件操作不行,要么只能直接操作文件夹,无法对文件夹遍历筛选。
后来确定使用先遍历文件夹打包,然后再压缩的方案。然后在找打包模块时发现tar打包时可以直接压缩。试验后确定使用这种方案。本机试验,12G的文件夹,耗时大约18分钟。
代码如下,其中的tar时第三方模块,需要另外安装 npm install tar
var fs = require('fs')
var path = require('path')
var util = require('util')
var tar = require('tar')
var zlib = require('zlib')
var now = Date.now()
var pack = new tar.Pack({gzip:true})
var root = path.join('F:\\test')
console.log(root)
//遍历文件夹,并以指定基准输出
readDirSync(root,"base")
function readDirSync(path,base) {
if(base == undefined) {
base = path
}
var pa = fs.readdirSync(path)
pa.forEach((ele,index)=>{
var info = fs.statSync(path + "/" + ele)
if(info.isDirectory()) {
//console.log("dir:" + ele)
readDirSync(path + "/" + ele,base +"/" + ele)
} else {
// console.log("file:" + base +"/" + ele)
pack.add(path + "/" + ele)
}
})
}
pack.end()
var writeStream = fs.createWriteStream('test.tar.gz')
writeStream.on('finish',()=>{
console.log(Date.now() - now)
})
//pack.write('test.tar')
pack.pipe(writeStream)
代码的逻辑很简单,就是遍历文件夹,添加到pack流中。第9行,设置使用gzip压缩。得到文件名后 就可以对文件做过滤了。也可以使用tar的api,设置filter过滤,根据自己喜好选择。
压缩文件的格式命名需要是 tar.gz 否则用解压软件打开时会产生奇怪的现象~~~
tar的项目地址 https://www.npmjs.com/package/tar
node压缩文件夹的更多相关文章
- C#压缩文件夹
using System;using System.Collections.Generic;using System.Text; ///第三方dllusing ICSharpCode.SharpZip ...
- C#利用SharpZipLib解压或压缩文件夹实例操作
最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. )下载SharpZipLib.dll,在http://www.icsharpcode. ...
- Java使用线程池递归压缩文件夹下面的所有子文件
本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import ...
- C++复制、压缩文件夹
之前写过一篇用zlib库来压缩的,但zlib只能压缩文件,我需要压缩文件夹,要想压缩文件夹还得利用zlib库自己写代码,我是真的服了,一个开源库这么不好用. C++复制文件夹也是麻烦事,网上这篇文章: ...
- C#压缩文件夹坑~
dotNet疯狂之路No.29 今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳. We're here to put a dent in t ...
- .net压缩文件夹
1,引用:using System.IO.Packaging; 2,压缩文件的方法: /// <summary> /// 压缩文件夹到制定的路径 /// </summary> ...
- C#压缩文件,C#压缩文件夹,C#获取文件
using System; using System.Data; using System.Configuration; using System.Collections.Generic; using ...
- 使用7zip批量压缩文件夹到不同压缩包
for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.7z" "%%X\" ...
- 简单测试Demo:如何用Java压缩文件夹和文件
一.直接贴出测试代码 package com.jason.zip; import java.io.File; import java.io.FileInputStream; import java.i ...
随机推荐
- [spring源码] 小白级别的源码解析IOC容器的依赖注入(三)
上一篇介绍了ioc容器的初始化过程,主要完成了ioc容器建立beanDefinition数据映射.并没有看到ioc容器对bean依赖关系进行注入. 接口getbean就是出发依赖注入发生的地方.下面从 ...
- shell脚本结构
echo $? 代表上一次命令的状态返回值,‘0’则代表为真<执行成功>,‘非零’则代表为假<执行失败>. shell脚本: <判断老男孩的年纪> [root@bo ...
- Mosquitto-1.5在Linux上的安装以及Android客户端的实现
一.关于MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的" ...
- 开始Flask项目
新建Flask项目. 设置调试模式. 理解Flask项目主程序. 使用装饰器,设置路径与函数之间的关系. 使用Flask中render_template,用不同的路径,返回首页.登录员.注册页. 用视 ...
- React项目新手指南
对于程序员而言:驼峰和下划线之间是一场宗派战争:大括号是否换行会成为一种党派:逗号写在行尾还是行首的人来自不同星球…… 然而,无规矩不成方圆,任何一个团队,要想有高质量的产出,第一步必须要对一些基本的 ...
- JS类小功能
工作中,总是要处理一些前端的小功能.都是网上搜的JS脚本 <script> //防止页面后退 history.pushState(null, null, document.URL); wi ...
- 10--Python入门--异常处理
在程序编写过程中,难免会有一些错误.python中有一些语句可以处理这些异常或者错误,使得程序能够运行,且识别到错误的位置 try..except函数,java中是try catch 在下面的例子中, ...
- java和js中JSONObject,JSONArray,Map,String之间转换
--------------------------------------------------Java中--------------------------------------------- ...
- Python 实现简易 Shell
什么是shell? (1)shell是一个系统软件,负责用户和操作系统内核之间的交互,是产生进程的进程(通过linux系统调用fork,exec),主要负责解释用户的命令,进而实现用户对进程的控制. ...
- linux command 4
#环境变量扩展 echo $PATH #算数表达式 echo $((3*5)) #参数扩展 echo ls *pdf #"" echo "$PATH $(cal)&quo ...