zoukankan      html  css  js  c++  java
  • node压缩文件夹

    前几天遇到一个需求,将一个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

  • 相关阅读:
    python数据类型--字符串
    Cannot open include file: 'afxcontrolbars.h': No such file or directory
    关于找不到tbb_debug.dll解决办法
    Android fill_parent、wrap_content和match_parent的区别
    多个摄像头同步工作【转】
    如何查找openCV函数源代码[转]
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)[转]
    CvCaptureFromCam
    OpenCV与相机的关系[转]
    10亿以内和987654互质正整数的和[转自深圳-冒泡]
  • 原文地址:https://www.cnblogs.com/zsxneil/p/7196741.html
Copyright © 2011-2022 走看看