Wie kann ich kopieren Sie ein Verzeichnis in einem ZIP-Archiv zu einem zweiten Zip-Archiv rubyzip mit?
Frage
Ich habe ein ZIP-Archiv mit mehreren Verzeichnissen. Mit Hilfe der rubyzip Juwel Ich möchte in das ZIP-Archiv gelangen, kopieren Sie ein bestimmtes Verzeichnis (und dessen Inhalt) und das Verzeichnis in ein zweites .zip-Archiv verschieben.
Im Idealfall würde ich nicht den Inhalt des ersten .zip-Archivs extrahieren muß, dann wieder zip sie in ein zweites Archiv. Ich hoffe, es gibt eine Möglichkeit, Methoden in dem rubyzip Juwel zu nutzen.
Lösung
Nach einem der Maintainer der rubyzip gem Überprüfung, ich habe gelernt, dass dies nicht möglich ist.
Andere Tipps
Die RubyZip Bibliothek muss seitdem aktualisiert worden ist, sie zu unterstützen. Das funktioniert für mich.
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
Für die Versionen von RubyZip <1.0, require 'zip/zip'
statt und Verwendung Zip::ZipFile
statt Zip::File
Das ist ein bisschen eine Brute-Force-Methode (und kann oder auch nicht für Ihre Anwendung), aber man konnte die gesamte erste Zip-Datei kopieren und dann rubyzip Methoden zu löschen alles, aber das Zielverzeichnis aus der kopierten Datei verwenden.
Theoretisch, was Sie fordern sollte möglich sein, wenn Sie deflate Kompression verwenden (die speichert jede Datei als einzeln komprimiert Artikel).