-5

我需要在 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';
4

3 回答 3

6

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

  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');
    
于 2013-04-01T09:10:31.537 回答
1

此链接可能对您有所帮助... 如果您想使用 perl 模块压缩文件,请在 perl 中创建和读取 tar.bz2 文件,然后使用

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

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

如果需要,将这些行添加到使用脚本中

于 2013-04-01T09:08:49.987 回答
-1

删除 ' 字符:

system("zip dispatch.zip $file");
于 2013-04-01T07:52:52.613 回答