Como posso copiar um diretório dentro de um arquivo zip para um segundo arquivo zip usando rubyzip?
Pergunta
Eu tenho um arquivo .zip contendo vários diretórios. Usando a gema Rubyzip, eu gostaria de chegar ao arquivo .zip, copiar um diretório especificado (e seu conteúdo) e mover o diretório para um segundo arquivo .zip.
Idealmente, eu não precisaria extrair o conteúdo do primeiro arquivo .zip e depois novamente zombando de um segundo arquivo. Espero que haja uma maneira de usar os métodos fornecidos na gema Rubyzip.
Solução
Depois de verificar com um dos mantenedores da gema Rubyzip, aprendi que isso não é possível.
Outras dicas
A biblioteca Rubyzip deve ter sido atualizada desde então para apoiá -la. Isso funcionou para mim.
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
Para versões de rubyzip <1,0, require 'zip/zip'
em vez disso, e use Zip::ZipFile
ao invés de Zip::File
Esse é um método de força bruta (e pode ou não funcionar para o seu aplicativo), mas você pode copiar o primeiro arquivo zip inteiro e depois usar os métodos Rubyzip para excluir tudo, exceto o diretório de destino do arquivo copiado.
Teoricamente, o que você está perguntando deve ser possível se você estiver usando a compactação (que armazena todos os arquivos como um item compactado individualmente).