【发布时间】:2009-09-04 04:10:41
【问题描述】:
我有一个包含多个目录的 .zip 存档。使用 rubyzip gem,我想进入 .zip 存档,复制指定目录(及其内容)并将目录移动到第二个 .zip 存档中。
理想情况下,我不必提取第一个 .zip 存档的内容,然后将它们重新压缩到第二个存档中。我希望有一种方法可以使用 rubyzip gem 中提供的方法。
【问题讨论】:
我有一个包含多个目录的 .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 require 'zip/zip',并使用Zip::ZipFile 代替Zip::File
【讨论】:
这是一种蛮力方法(可能适用于您的应用程序,也可能不适用),但您可以复制整个第一个 zip 文件,然后使用 rubyzip 方法从复制的文件中删除除目标目录之外的所有内容。
理论上,如果您使用 deflate 压缩(将每个文件存储为单独压缩的项目),您的要求应该是可能的。
【讨论】: