在不使用CPAN模块的情况下在perl中创建ZIP文件

时间:2013-04-01 07:49:55

标签: perl zip

我需要在perl.enter代码中创建一个zip文件 例如现有文件名是2.csv我想要一个脚本使它成为2.zip 我试过了

my $file = 'dispatch_report_seg_flo.csv' ;
# Retrieve the namme of the file to archive.
print("Name the file to archive: ");

# Confirm the file exists, if not exit the program.
(-e $file) or die("Cannot find file `$file_nm`.\n");

# Zip the file.
print("Trying file name '$file.zip'");
system("zip 'dispatch.zip' '$file'");
my $file1 = 'dispatch.zip';

3 个答案:

答案 0 :(得分:5)

除非文件名中包含单引号,否则应该有效。以下是两种更好的方法:

  1. system($EXECUTABLE, @ARGS),它不会不必要地产生一个shell。

    system("zip", "dispatch.zip", $file);
    
  2. system($SHELL_COMMAND),需要创建一个shell命令。

    # A poor substitute for String::ShellQuote's shell_quote
    sub shell_quote {
        my @s = @_;
        for (@s) { s/'/'\\''/g; $_ = "'$_'"; }
        return join(' ', @s);
    }
    
    system(shell_quote("zip", "dispatch.zip", $file));
    

    显然,第一个解决方案更好,但是如果你想进行某种shell重定向,你可能想要使用这个解决方案。

    system(shell_quote("zip", "dispatch.zip", $file) . ' >/dev/null');
    

答案 1 :(得分:1)

此链接可以帮助您...... create and read tar.bz2 files in perl 如果您想使用perl模块压缩文件,请使用

use IO::Compress::Zip qw(:all);

  zip [ glob("*.xls") ] => "test_zip.zip"
    or die "some problem: $ZipError" ;

如果需要

,请将这些行添加到使用脚本中

答案 2 :(得分:-1)

删除'字符:

system("zip dispatch.zip $file");