sole / node-zip-folder

zips a folder and calls your callback when it's done

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Error Zipping Folder with many files or sub folders

chelinho139 opened this issue · comments

Hey, so I am trying to zip my DB backup, it has like 100.000 folders, and it throws an:
Error: EMFILE: too many open files

However, i am able to zip it manually using linux:
zip -r backupDB_2017-6-15.zip backupDB_2017-6-15

Hope someone can help me out...

This is the error stacktrace I get:


events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: EMFILE: too many open files, scandir '/home/centos/server/backupDB_2017-6-14'
    at Error (native)
    at Object.fs.readdirSync (fs.js:808:18)
    at Glob._readdir (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/node_modules/glob/glob.js:662:20)
    at Glob._process (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/node_modules/glob/glob.js:446:15)
    at Glob.iterator (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/node_modules/glob/glob.js:181:10)
    at Array.forEach (native)
    at new Glob (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/node_modules/glob/glob.js:179:22)
    at glob (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/node_modules/glob/glob.js:57:11)
    at Function.globSync [as sync] (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/node_modules/glob/glob.js:76:10)
    at /home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/lib/util/file.js:62:17
    at /home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/lib/util/file.js:30:19
    at Array.forEach (native)
    at processPatterns (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/lib/util/file.js:24:23)
    at Object.file.expand (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/lib/util/file.js:60:17)
    at Object.file.expandMapping (/home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/lib/util/file.js:94:8)
    at /home/centos/server/scheduler/node_modules/zip-folder/node_modules/archiver/lib/util/file.js:159:19

Thanks!

Hi @chelinho139 Issue is fixed in #8

@arunkumarpalaniappan how can I pull that?

@chelinho139

You can't get it in npm until @sole accepts the PR.

But you can use the below snippet to make it work

P.S: Install Archiver using npm install archiver

const fs = require('fs');
const archiver = require('archiver');
const zipFolder = (srcFolder, zipFilePath, callback) => {
var output = fs.createWriteStream(zipFilePath);
var zipArchive = archiver('zip');
output.on('close', function() {
callback();
});
zipArchive.pipe(output);
zipArchive.glob('**/*',
{ cwd: srcFolder,
src: ['**/*'],
expand: true }
);
zipArchive.finalize(function(err, bytes) {
if(err) {
callback(err);
}
});
}