我有一个包含几个目录.zip存档。使用rubyzip宝石我想伸入.zip存档,复制指定的目录(和其内容),移动目录到第二.zip存档。

理想我就不必提取第一.zip存档的内容,然后重新压缩它们成第二压缩文件。我希望有使用在rubyzip宝石提供的方法的一种方式。

有帮助吗?

解决方案

与rubyzip宝石的维护者的一个检查后,我已经了解到,这是不可能的。

其他提示

在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

这是一个有点蛮力的方法(可能或可能不适合你的应用程序中工作),但你可以复制整个第一zip文件,然后使用rubyzip方法来删除一切,但在复制文件的目标目录。

理论上你是问,如果你正在使用deflate压缩(其中每一个文件存储作为一个单独压缩项目)应该是可能的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top