我有几个zip文件,它有多个文件和文件夹。它基本上包含文本文件。说扩展名'a'和'b'。
我想使用perl脚本或java代码将扩展名'a'文件和扩展名'b'文件分隔成单独的zip文件。
我可以选择内容并将其放入另一个zip文件,而不是解压缩文件。这甚至可能吗?任何帮助都会很棒。
我之所以想知道这是因为我有大量的大尺寸zip文件,所以如果可行,我的代码将非常高效。
任何关于是否使用perl或java的评论都是奖励。
谢谢。
答案 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