【问题标题】:How can I copy a directory inside a zip archive to a second zip archive using rubyzip?如何使用 ruby​​zip 将 zip 存档中的目录复制到第二个 zip 存档?
【发布时间】:2009-09-04 04:10:41
【问题描述】:

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

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

【问题讨论】:

    标签: ruby rubyzip


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    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

    【讨论】:

    • 感谢您的回答。我只是在寻找这段代码——它对我来说很好。
    • 谢谢!我已将您的贡献整合到答案中。
    【解决方案3】:

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

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

    【讨论】:

    • 我实际上尝试了你提到的暴力破解方法,但是.zip的内容太大了,我必须复制几份——结果太慢了。
    • 向您的问题添加更多信息会有所帮助:您使用的是什么操作系统?拉链尺寸?将文件存储在 zip 中的原因。
    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多