【问题标题】:zip the folder using built-in modules使用内置模块压缩文件夹
【发布时间】:2016-11-12 21:36:24
【问题描述】:

编辑 -> 有人可以建议对我的答案进行编辑吗,例如我不确定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

代码

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);
                    });
                }
            })
        }
    });
};

【问题讨论】:

  • 您能否将您在 Question 中尝试过的javascript 包含在内?
  • 我还没有一个起点,我正在寻找可以帮助我写一些的代码。将链接的问题视为尝试
  • 文档提供了示例,是吗?
  • 我可以在命令行上做,但不能在 nodejs 上工作,编辑我的最新代码
  • 原来问题出在which zip 命令上,stdout 中有一个\n,使用trim 删除,它现在可以工作,但想知道它默认将 zip 文件保存在哪里

标签: javascript node.js zip tar zlib


【解决方案1】:

**最简单流行的方法是-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 })
})

【讨论】:

    【解决方案2】:

    在 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());
                }
            });
        });
    }
    

    函数压缩

    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);
    };
    

    【讨论】:

    • 晚了四年,但我可以确认这适用于 linux... (manjaro)
    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多