我有一个包含多个目录的.zip存档。使用rubyzip gem我想进入.zip存档,复制指定的目录(及其内容)并将目录移动到第二个.zip存档。
理想情况下,我不必提取第一个.zip存档的内容,然后将它们重新压缩到第二个存档中。我希望有一种方法可以使用rubyzip gem中提供的方法。
答案 0 :(得分:1)
在与rubyzip gem的一位维护者核实后,我了解到这是不可能的。
答案 1 :(得分:1)
从那时起,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
答案 2 :(得分:0)
这是一种强力方法(可能适用于您的应用程序也可能不适用),但您可以复制整个第一个zip文件,然后使用rubyzip方法从复制的文件中删除除目标目录之外的所有内容。
理论上,如果您使用deflate压缩(将每个文件存储为单独压缩的项目),您应该可以提出的问题。