Comment puis-je copier un répertoire dans une archive zip dans une seconde archive zip en utilisant rubyzip?

StackOverflow https://stackoverflow.com/questions/1377189

  •  21-09-2019
  •  | 
  •  

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.

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top