Comment puis-je copier un répertoire dans une archive zip dans une seconde archive zip en utilisant rubyzip?
Question
J'ai une archive .zip contenant plusieurs répertoires. En utilisant la gemme rubyzip Je voudrais atteindre dans l'archive .zip, copier un répertoire spécifié (et son contenu) et déplacer le répertoire dans une seconde archive .ZIP.
Idéalement, je n'aurais pas à extraire le contenu de la première archive .ZIP, puis re-zip dans une deuxième archive. J'espère qu'il ya un moyen d'utiliser les méthodes fournies dans la gemme rubyzip.
La solution
Après avoir vérifié avec l'un des mainteneurs de la gemme rubyzip, je l'ai appris que ce n'est pas possible.
Autres conseils
La bibliothèque RubyZip doit avoir été mis à jour depuis pour le soutenir. Cela a fonctionné pour moi.
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
Pour les versions de RubyZip <1.0, require 'zip/zip'
au lieu, et l'utilisation Zip::ZipFile
au lieu de Zip::File
est un peu d'une méthode de force brute (et peut ou peut ne pas fonctionner pour votre application), mais vous pouvez copier le fichier zip tout le premier et ensuite utiliser des méthodes rubyzip pour supprimer tout sauf le répertoire cible du fichier copié.
En théorie ce que vous demandez doit être possible que si vous utilisez dégonfler la compression (qui stocke tous les fichiers comme un élément comprimé individuellement).