从zip文件复制一个或多个文件,而不使用perl或java实际解压缩

时间:2012-10-19 18:44:57

标签: java perl zip unzip

我有几个zip文件,它有多个文件和文件夹。它基本上包含文本文件。说扩展名'a'和'b'。

我想使用perl脚本或java代码将扩展名'a'文件和扩展名'b'文件分隔成单独的zip文件。

我可以选择内容并将其放入另一个zip文件,而不是解压缩文件。这甚至可能吗?任何帮助都会很棒。

我之所以想知道这是因为我有大量的大尺寸zip文件,所以如果可行,我的代码将非常高效。

任何关于是否使用perl或java的评论都是奖励。

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用Java ZipFile类来读取zip文件的内容,迭代zip中的条目并获取相关条目的输入流。使用ZipOutputStream可以直接将文件放入新的zip文件中 - 尽管它们之间是解压缩/压缩的。我不知道可以直接复制压缩内容的工具。

答案 1 :(得分:2)

这可能是用Perl Archive::Zip库完成的:

实际oneliner可能如下所示:

perl -MArchive::Zip -e 'Archive::Zip->new("test.zip")->extractMember("testx.txt", "foo.txt");'

但我想提供完整的代码甚至一些支票:

use Archive::Zip;

my $zip = Archive::Zip->new("test.zip");
my $file_path = "test.txt";

my $PARANOID = 1;
if ($PARANOID) {
    my $file = $zip->memberNamed($file_path);
    unless ($file) {
        die "File '$file_path' not found in the archive";
    }
}

$zip->extractMember($file_path, "extracted_file.txt");

请注意,您需要安装Archive::Zip库:

cpan Archive::Zip

或者,如果您对Perl生态系统更有信心并且安装了闪亮的cpanm实用程序:

cpanm Archive::Zip

答案 2 :(得分:0)

我刚刚发现Unix上的zip有一个--copy选项,可以将文件从一个存档复制到另一个存档。我不相信它会在整个过程中解压缩文件,因此它应该是您(和我)所需要的。

语法是:

$ zip source.zip "*.c" --copy --out destination.zip