使用内置模块压缩文件夹

时间:2016-07-11 02:47:56

标签: javascript node.js zip tar zlib

修改 - >有人可以建议编辑我的答案,例如我不确定exec是更好还是spawn

是否可以使用zlib和其他内置模块将目录/文件夹与其内容压缩?

我正在寻找一种没有外部依赖关系的方法。

另一种选择是在mac,windows等上为zip,tar等运行本地进程。我确信在任一操作系统上都有命令行实用程序

This is not an answer但它与我正在寻找的东西有某种关系,它正在产生一个拉链的本地进程。

我正在看另一个link

Unix command for zip | exec and spawn

我在终端上尝试过的命令,

  1. / usr / bin / zip test.zip / resources / html / article
  2. du -hs test.zip
  3. 代码

    var zip = function(path) {
        const spawn = require('child_process').spawn;
        const exec = require('child_process').exec;
        exec("which zip", function (error, stdout, stderr) {
            if (error) {
                console.log(error);
            } else {
                exec(stdout + " -r " + path + "/test.zip " + path, function(error, stdout, stderr){
                    if(error) {
                        console.log(error);
                    } else {
                        exec("du -hs test.zip", function(error, stdout, stderr){
                            console.log('done');
                            console.log(arguments);
                        });
                    }
                })
            }
        });
    };
    

2 个答案:

答案 0 :(得分:0)

在Mac上测试并且有效。有人可以在Linux上测试吗?对windows的任何想法?

注意使用stdout.trim()来摆脱从控制台返回的额外\n字符。

function execute(command) {
    const exec = require('child_process').exec;
    return new Promise(function(resolve, reject){
        exec(command, function(error, stdout, stderr){
            if(error) {
                reject(error);
            } else {
                stderr ? reject(stderr) : resolve(stdout.trim());
            }
        });
    });
}

功能zip

var zip = function(path) {
    execute("which zip")
        .then(function(zip){
            return execute(zip  + " -r abc.zip " + path);
        })
        .then(function(result){
            return execute("du -hs abc.zip");
        })
        .then(function(result){
            console.log(result);
        })
        .catch(console.error);
};

答案 1 :(得分:0)

**最简单和流行的方法是-child_process exec执行命令**

const exec = require('child_process').exec;

const ls = exec(`tar -czvf filename.tar.gz dirPathToZip && mv fileName.tar.gz  moveZipFileToPath`);

ls.stdout.on('data', (data) => {
   console.log(`stdout: ${data}`)
});

ls.stderr.on('data', (data) => {
   console.error(`stderr: ${data}`)
});

ls.on('close', (code) => {
   fs.rmdirSync(pathDoDeleteDir, { recursive: true })
})