¿Cómo puedo copiar un directorio dentro de un archivo zip a un segundo archivo zip utilizando rubyzip?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

Tengo un archivo .zip que contiene varios directorios. El uso de la gema rubyzip me gustaría llegar en el archivo .zip, copiar un directorio especificado (y su contenido) y mover el directorio en un segundo archivo .zip.

Lo ideal sería no tener que extraer el contenido del primer archivo .zip, las vuelve a comprimir en un segundo archivo. Estoy esperando que hay una manera de utilizar los métodos proporcionados en la gema rubyzip.

¿Fue útil?

Solución

Después de consultar con uno de los mantenedores de la gema rubyzip, he aprendido que esto no es posible.

Otros consejos

La biblioteca RubyZip debe haber sido actualizado desde entonces para apoyarlo. Esto funcionó para mí.

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

En versiones de RubyZip <1,0, require 'zip/zip' lugar, y el uso Zip::ZipFile en lugar de Zip::File

Esto es un poco de un método de fuerza bruta (y puede o no funcionar para su aplicación), pero se puede copiar todo el primer archivo zip y luego usar rubyzip métodos para eliminar todo menos el directorio de destino en el archivo copiado.

En teoría lo que están pidiendo, debería ser posible si está utilizando desinflar la compresión (que almacena todos los archivos como un elemento comprimido de forma individual).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top