2009-09-04 30 views
2

我有一個.zip壓縮包含幾個目錄。使用rubyzip gem,我希望進入.zip壓縮文件,複製指定的目錄(及其內容)並將目錄移動到第二個.zip壓縮文件中。如何使用rubyzip將zip檔案內的目錄複製到第二個zip檔案中?

理想情況下,我不必提取第一個.zip壓縮文件的內容,然後將它們重新壓縮到第二個壓縮文件中。我希望有一種方法可以使用rubyzip gem中提供的方法。

回答

1

在與一位rubyzip寶石的維護人員覈對之後,我瞭解到這是不可能的。

+0

請檢查[約翰答案](http://stackoverflow.com/a/11077181/676874)。我剛剛測試成功。 – knut

0

這是一種暴力破解方法(可能或可能不適用於您的應用程序),但您可以複製整個第一個zip文件,然後使用rubyzip方法從複製的文件中刪除除目標目錄以外的所有內容。

理論上講,如果您使用放氣壓縮(將每個文件存儲爲單獨壓縮的項目),您應該可以這麼做。

+0

其實我試過你提到的蠻力方法,但.zip文件的內容是如此之大,我必須做好幾份 - 結果太慢了。 – rswolff

+0

在問題中添加更多信息會有幫助:您在操作系統上使用什麼操作系統?拉鍊的大小?將文件存儲在zip中的原因。 –

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

+0

感謝您的回答。我只是尋找這個代碼 - 它對我來說工作得很好。 – knut

+0

謝謝!我已將您的貢獻整合到答案中。 –