¿Cómo puedo copiar un directorio dentro de un archivo zip a un segundo archivo zip utilizando rubyzip?
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.
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).