我有几个包含多个文件和文件夹的 zip 文件。它基本上包含文本文件。说扩展名“a”和“b”。
我想使用 perl 脚本或 java 代码将扩展“a”文件和扩展“b”文件分成单独的 zip 文件。
我可以选择内容并将其放入另一个压缩文件中,而不是解压缩文件。这甚至可能吗?任何帮助都会很棒。
我想知道这一点的原因是我有大量大尺寸的 zip 文件,所以如果可能的话,我的代码将非常有效。
无论是使用 perl 还是 java 的任何评论都将是一个奖励。
谢谢你。
您可以使用Java ZipFile类来读取 zip 文件的内容,遍历 zip 中的条目并获取相关条目的输入流。使用ZipOutputStream可以直接将文件放入一个新的 zip 文件中——尽管它们之间是解压缩/压缩的。我不知道可以直接复制压缩内容的工具。
这可以使用 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
我刚刚发现 Unix 上的 zip 有一个 --copy 选项,可以将文件从一个存档复制到另一个存档。我不相信它会在此过程中解压缩文件,因此它应该正是您(和我)所需要的。
语法是:
$ zip source.zip "*.c" --copy --out destination.zip