1

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

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

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

我想知道这一点的原因是我有大量大尺寸的 zip 文件,所以如果可能的话,我的代码将非常有效。

无论是使用 perl 还是 java 的任何评论都将是一个奖励。

谢谢你。

4

3 回答 3

3

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

于 2012-10-19T19:03:26.350 回答
2

这可以使用 PerlArchive::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
于 2012-10-20T10:45:36.307 回答
0

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

语法是:

$ zip source.zip "*.c" --copy --out destination.zip
于 2017-04-10T17:41:42.860 回答