码迷,mamicode.com
首页 > 其他好文 > 详细

node压缩文件夹

时间:2017-07-17 20:13:21      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:code   ons   .gz   new   stat   tar.gz   util   class   dir   

前几天遇到一个需求,将一个10G的文件夹打包压缩,并去除黑名单上的文件。

node自带的只能压缩文件。网上看了集中方案要么对大文件操作不行,要么只能直接操作文件夹,无法对文件夹遍历筛选。

后来确定使用先遍历文件夹打包,然后再压缩的方案。然后在找打包模块时发现tar打包时可以直接压缩。试验后确定使用这种方案。本机试验,12G的文件夹,耗时大约18分钟。

代码如下,其中的tar时第三方模块,需要另外安装     npm install tar

 1 var fs = require(‘fs‘)
 2 var path = require(‘path‘)
 3 var util = require(‘util‘)
 4 var tar = require(‘tar‘)
 5 var zlib = require(‘zlib‘)
 6 
 7 var now = Date.now()
 8 
 9 var pack = new tar.Pack({gzip:true})
10 
11 var root = path.join(‘F:\\test‘)
12 console.log(root)
13 
14 //遍历文件夹,并以指定基准输出
15 readDirSync(root,"base")
16 function readDirSync(path,base) {
17     if(base == undefined) {
18         base = path
19     }
20     var pa = fs.readdirSync(path)
21     pa.forEach((ele,index)=>{
22         var info = fs.statSync(path + "/" + ele)
23         
24         if(info.isDirectory()) {
25             //console.log("dir:" + ele)
26             readDirSync(path + "/" + ele,base +"/" + ele)
27         } else {
28            // console.log("file:" + base +"/" + ele)
29            pack.add(path + "/" + ele)
30         }
31     })
32 
33 }
34 
35 pack.end()
36 var writeStream = fs.createWriteStream(‘test.tar.gz‘)
37 
38 writeStream.on(‘finish‘,()=>{
39     console.log(Date.now() - now)
40 })
41 //pack.write(‘test.tar‘)
42 pack.pipe(writeStream)

代码的逻辑很简单,就是遍历文件夹,添加到pack流中。第9行,设置使用gzip压缩。得到文件名后 就可以对文件做过滤了。也可以使用tar的api,设置filter过滤,根据自己喜好选择。

压缩文件的格式命名需要是 tar.gz 否则用解压软件打开时会产生奇怪的现象~~~

tar的项目地址 https://www.npmjs.com/package/tar

node压缩文件夹

标签:code   ons   .gz   new   stat   tar.gz   util   class   dir   

原文地址:http://www.cnblogs.com/zsxneil/p/7196741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!