如何在linux中使用perl提取7z zip文件

时间:2018-01-03 11:47:17

标签: perl 7zip

我在以下位置/ aaa / bbb / ccc中有一个example.7z zip文件。我需要在同一位置提取该zip文件。我尝试了很多方法,但无法获得正确的输出。请帮帮我。提前谢谢!

use strict ;
use warnings ;
use IO::Uncompress::Unzip qw(unzip $UnzipError) ;
use IO::File ;
my $input = '/aaa/bbb/ccc/example.7z';
my $zip = (split(/\//, $input))[-1]; #to extract the example.7z
my $buffer = '/aaa/bbb/ccc/';
unzip $zip => \$buffer
       or die "unzip failed: $UnzipError\n"

我试过这个方法。这个例子.7z zip文件包含三个.BIN文件。我需要提取它们。目前我在该位置获取任何输出。

1 个答案:

答案 0 :(得分:0)

我建议你使用 Archive::SevenZip 模块。

通过阅读文档和做一些实验,我想出了这段代码。

use strict;
use warnings 'all';

use Archive::SevenZip;

my $ar = Archive::SevenZip->new(
    archivename => "YourArchive.7z",
    find        => 1,
);

for my $entry ( $ar->list ) {

    next unless $entry->{Attributes} =~ /^A/;

    my $target = join "/", "YourExtractedFolderName", $entry->basename;
    $ar->extractMember( $entry->fileName, $target );
}

所有文件都被解压缩到文件夹的根目录,因为我测试$entry是否为文件(文件$entry->{'Attributes'}A,目录为D。知道这一点,您可以通过修改我的代码来提取文件夹。

您还应检查存档是否存在,否则将返回错误。