Como posso copiar um diretório dentro de um arquivo zip para um segundo arquivo zip usando rubyzip?

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

  •  21-09-2019
  •  | 
  •  

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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top