2009-09-04 13 views
2

私はいくつかのディレクトリを含む.zipアーカイブを持っています。 rubyzip gemを使用して、.zipアーカイブにアクセスし、指定されたディレクトリ(およびその内容)をコピーし、そのディレクトリを2番目の.zipアーカイブに移動したいと思います。ruby​​zipを使用して、zipアーカイブ内のディレクトリを2番目のzipアーカイブにコピーする方法はありますか?

理想的には、最初の.zipアーカイブの内容を抽出し、2番目のアーカイブに再度圧縮する必要はありません。私はrubyzip gemで提供されているメソッドを使用する方法があることを望んでいます。

答えて

1

ルビージップ宝石のメンテナーの一人に確認した後、私はこれが不可能であることを学びました。

+0

[Johns answer](http://stackoverflow.com/a/11077181/676874)を確認してください。私はちょうど成功とそれをテストしました。 – knut

0

これはやりとりの方法です(アプリケーションによっては機能しない場合もあります)が、最初のzipファイル全体をコピーしてからrubyzipメソッドを使用して、コピー先のファイル。

deflate圧縮(すべてのファイルを個別に圧縮されたアイテムとして保存する)を使用している場合、理論的には何を求めているのでしょうか。

+0

の代わりにZip::ZipFileを使用し、私は実際にあなたが言及した強引な方法を試してみましたが、.zipファイルの内容はとても大きく、私がする必要がありますいくつかのコピーを作る - それはあまりにも遅くなってしまう。 – rswolff

+0

あなたの質問にいくつかの情報を追加すると役立つでしょう:あなたはどのOSですか?ジップのサイズ? zipファイルを保存する理由 –

1

それ以降、RubyZipライブラリは更新されていなければなりません。これは私のために働いた。

代わりRubyZip < 1.0、 require 'zip/zip'のバージョンについて
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 

、およびZip::File

+0

あなたの答えをありがとう。私はちょうどこのコードを正確に探しました - それは私のためにうまくいきました。 – knut

+0

ありがとう!私は答えにあなたの貢献を統合しました。 –

関連する問題