Compactar arquivos zip com maior compactação

10

Eu tenho um grande número de arquivos zip que foram compactados usando o comando zip. Gostaria de recomprimi-los com o sinalizador -9 para melhorar a taxa de compactação. Alguém sabe se isso pode ser feito sem descomprimir manualmente e depois comprimir.

PS. Preciso mantê-los como arquivos zip, pois eles são exibidos para usuários do Windows (e, como tal, possuem espaços em branco em seus nomes)

Smartelf
fonte
a re-compactação só é possível descompactando o arquivo e compactando novamente. é dependente de algoritmo. Você também pode tentar bzip2 ou xz ainda melhor.
Dica: isso também pode ser feito com arquivos XLSX ou XLSM Excel, pois na verdade eles são arquivos ZIP que contêm XMLs e outras coisas.
Cristian Ciupitu 17/03/2019

Respostas:

10

Você não pode melhorar a taxa de compactação sem descompactar os dados. Você não precisa extrair todos os arquivos zip antes de compactá-los, mas eu recomendo descompactar um arquivo zip inteiro antes de compactar novamente.

É possível recomprimir os arquivos em um arquivo zip, um de cada vez, e adicioná-los novamente antes de ir para o próximo arquivo contido no arquivo zip. Isso requer N reescritas do arquivo zip para um arquivo zip contendo N arquivos. É muito mais eficiente extrair os arquivos N e gerar o novo arquivo zip de uma só vez, compactando todos os arquivos -9.

Anthon
fonte
1
Meu objetivo não é evitar a descompactação, mas manter a estrutura do arquivo igual. e para não alterar nenhum metadado do arquivo.
19314
1
@ Smartmart Eu não acho que você pode evitar a descompressão. Seus outros requisitos são possíveis, não há razão para que alguns dados precisem ser alterados.
terdon
2
@ Smart como eu já indiquei, você ** tem que ** recomprimir. Atribuir os mesmos metadados de arquivo não deve ser um problema se você fizer isso, por exemplo, com um programa Python e seu módulo zip. Com unzip/ zipmantendo os metadados do mesmo é provavelmente mais difícil.
Anthon
6

Existe um utilitário chamado AdvanceCOMP que faz exatamente o que você está procurando. Ele recompacta arquivos ZIP e GZ (e alguns outros) sem extração intermediária para o disco. (Acredito que o mecanismo usado é descompactar os dados e recomprimi-los, mas isso não requer a gravação de arquivos no disco nem a regeneração de metadados.)

gaelicWizard
fonte