2

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

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

4

3 回答 3

1

在与 ruby​​zip gem 的维护者之一核实后,我了解到这是不可能的。

于 2009-09-04T12:37:54.047 回答
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

于 2012-06-18T05:06:27.057 回答
0

这是一种蛮力方法(可能适用于您的应用程序,也可能不适用),但您可以复制整个第一个 zip 文件,然后使用 ruby​​zip 方法从复制的文件中删除除目标目录之外的所有内容。

从理论上讲,如果您使用 deflate 压缩(将每个文件存储为单独压缩的项目),您的要求应该是可能的。

于 2009-09-04T04:20:44.133 回答