我有一个包含多个目录的 .zip 存档。使用 rubyzip gem,我想进入 .zip 存档,复制指定的目录(及其内容)并将目录移动到第二个 .zip 存档中。
理想情况下,我不必提取第一个 .zip 存档的内容,然后将它们重新压缩到第二个存档中。我希望有一种方法可以使用 rubyzip gem 中提供的方法。
在与 rubyzip gem 的维护者之一核实后,我了解到这是不可能的。
从那时起,RubyZip 库必须已更新以支持它。这对我有用。
require 'rubygems'
require 'zip' # gem 'rubyzip', '>= 1.0'
Zip::File.open('large.zip', false) do |input|
Zip::File.open('small.zip', true) do |output|
input.glob('my_folder_name/*') do |entry|
entry.get_input_stream do |input_entry_stream|
output.get_output_stream(entry.name) do |output_entry_stream|
# you could also chunk this, rather than reading it all at once.
output_entry_stream.write(input_entry_stream.read)
end
end
end
end
end
对于 RubyZip < 1.0 的版本,请require 'zip/zip'
改为使用,而Zip::ZipFile
不是使用Zip::File
这是一种蛮力方法(可能适用于您的应用程序,也可能不适用),但您可以复制整个第一个 zip 文件,然后使用 rubyzip 方法从复制的文件中删除除目标目录之外的所有内容。
从理论上讲,如果您使用 deflate 压缩(将每个文件存储为单独压缩的项目),您的要求应该是可能的。