我的问题是,我必须使用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文件夹开始。
有什么解决办法吗?
我之所以需要它是一个单独的命令,是因为它是PLSQL函数中作业的一个操作,比如:
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;
我还没能用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;
创建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