【问题标题】:Zip compress without root folders没有根文件夹的 Zip 压缩
【发布时间】:2020-08-13 13:20:12
【问题描述】:

我的问题是我必须使用 linux zip 控制台命令生成一个 zip 文件。我的命令如下:

zip -r /folder1/folder2/EXP_45.zip /folder1/folder2/EXP_45/

只返回一个正确的 zip,其中包含我想要的根文件夹:

返回

EXP_45.zip

-文件夹1

--文件夹2

---EXP_45

...

我想要

EXP_45.zip

-EXP_45

...

EXP_45 是一个可以包含文件和文件夹的文件夹,它们必须存在于 zip 中。我只希望树结构以 EXP_45 文件夹开头。

有什么解决办法吗?

我需要它是单个命令的原因是它是 PL SQL 函数中的作业操作,例如:

BEGIN
DBMS_SCHEDULER.CREATE_JOB ( 
    JOB_NAME=>'compress_files',       --- job name 
    JOB_ACTION=>'/usr/bin/zip',    --- executable file with path 
    JOB_TYPE=>'executable',        -----   job type
    NUMBER_OF_ARGUMENTS=>4,  --  parameters in numbers                   
    AUTO_DROP =>false,
    CREDENTIAL_NAME=>'credentials'   -- give credentials name which you have created before "credintial"
    );

dbms_scheduler.set_job_argument_value('compress_files',1,'-r');
dbms_scheduler.set_job_argument_value('compress_files',2,'-m');
dbms_scheduler.set_job_argument_value('compress_files',3,'/folder1/folder2/EXP_45.zip');
dbms_scheduler.set_job_argument_value('compress_files',4,'/folder1/folder2/EXP_45/');
DBMS_SCHEDULER.RUN_JOB('compress_files');
END;

【问题讨论】:

    标签: linux ubuntu plsql zip dbms-scheduler


    【解决方案1】:

    我无法使用 zip 找到解决此问题的方法,但我使用 jar 找到了它。命令是:

    jar cMf /folder1/folder2/EXP_45.zip -C /folder1/folder2/EXP_45 .
    

    此外,如果它适用于某人,则在 pl sql 中使用作业的解决方案是:

    BEGIN
    DBMS_SCHEDULER.CREATE_JOB ( 
        JOB_NAME=>'compress_files',       --- job name 
        JOB_ACTION=>'/usr/bin/jar',    --- executable file with path 
        JOB_TYPE=>'executable',        -----   job type
        NUMBER_OF_ARGUMENTS=>5,  --  parameters in numbers                   
        AUTO_DROP =>false,
        CREDENTIAL_NAME=>'credentials'   -- give credentials name which you have created before "credintial"
        );
    
    dbms_scheduler.set_job_argument_value('compress_files',1,'cMf');
    dbms_scheduler.set_job_argument_value('compress_files',2,'/folder1/folder2/EXP_45.zip');
    dbms_scheduler.set_job_argument_value('compress_files',3,'-C');
    dbms_scheduler.set_job_argument_value('compress_files',4,'/folder1/folder2/EXP_45');
    dbms_scheduler.set_job_argument_value('compress_files',5,'.');
    DBMS_SCHEDULER.RUN_JOB('compress_files');
    END;
    

    【讨论】:

      【解决方案2】:

      您希望在创建 zip 文件时使用-j(或--junk-paths)选项。以下来自 zip 手册页。

         -j
         --junk-paths
                Store just the name of a saved file (junk the path), and do not store directory names. 
                By default, zip will store the full path (relative to the current directory).
      

      在问题澄清后更新

      为什么不将下面代码的等价物放在一个 shell 脚本中并让 SQL 函数调用它呢?您只需将目录名称传递给 cd into 和输出 zip 的名称。

      cd folder1/folder2
      zip -r /tmp/EXP_45.zip EXP_45
      

      【讨论】:

      • 我的问题是 EXP_45 文件夹可能包含其他文件夹,我需要保留该结构。我想要存储文件夹,但结构必须从 EXP_45 开始。
      • 不明显那是您在原始问题中想要的。这行得通吗? cd folder1/folder2; zip -r /tmp/EXP_45.zip EXP_45
      • 它不起作用,它必须在我拥有的功能的单个命令中。
      • 您能否详细说明您是如何调用 zip 的。你用什么语言工作?这将有助于我们了解您所面临的限制。
      • 我已经更新了信息。并感谢您的回答:)
      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 2022-10-07
      • 2013-10-22
      • 2011-11-30
      相关资源
      最近更新 更多