複数のディレクトリを含む .zip アーカイブがあります。.zip アーカイブに到達したい rubyzip gem を使用して、指定されたディレクトリ (およびその内容) をコピーし、そのディレクトリを 2 番目の .zip アーカイブに移動します。
理想的には、最初の .zip アーカイブの内容を抽出してから、それらを 2 番目のアーカイブに再圧縮する必要はありません。rubyzip gem で提供されているメソッドを使用する方法があることを願っています。
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
rubyzip gem のメンテナーの 1 人に確認したところ、これは不可能であることがわかりました。
これは少し強引な方法ですが (アプリケーションで機能する場合と機能しない場合があります)、最初の zip ファイル全体をコピーしてから、rubyzip メソッドを使用して、コピーしたファイルからターゲット ディレクトリ以外のすべてを削除することができます。
deflate 圧縮 (すべてのファイルを個別に圧縮されたアイテムとして保存する) を使用している場合、理論的には、あなたが求めていることが可能になるはずです。