如何使用rubyzip将zip存档中的目录复制到第二个zip存档?

时间:2009-09-04 04:10:41

标签: ruby rubyzip

我有一个包含多个目录的.zip存档。使用rubyzip gem我想进入.zip存档,复制指定的目录(及其内容)并将目录移动到第二个.zip存档。

理想情况下,我不必提取第一个.zip存档的内容,然后将它们重新压缩到第二个存档中。我希望有一种方法可以使用rubyzip gem中提供的方法。

3 个答案:

答案 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压缩(将每个文件存储为单独压缩的项目),您应该可以提出的问题。