Como combinar / mesclar arquivos zip?

16

Nos últimos meses, copiei várias pastas de dados para arquivos zip em intervalos semanais. Agora eu gostaria de combinar esses arquivos zip em um arquivo zip, porque a maior parte do conteúdo dos arquivos zip existentes são apenas versões diferentes dos mesmos arquivos de dados.

Portanto, se um arquivo aparecer em mais de um dos arquivos zip existentes, eu gostaria que a versão mais recente estivesse no novo arquivo zip sendo criado. É claro que se um arquivo aparecer em apenas um arquivo zip existente, eu também o quero no arquivo zip final.

Estou tentando evitar descompactá-los, um a um, em uma pasta de trabalho, sobrescrevendo dados de arquivos zip antigos com dados de arquivos zip mais recentes e, em seguida, rezipando tudo em um novo arquivo zip.

Pelo que entendi, o pkzip combina os próprios arquivos zip, mas existe um método confiável e rápido que qualquer um pode me informar?

    
por CChriss 08.01.2010 / 04:40

7 respostas

4

você não vai gostar, mas: descompactar tudo em uma pasta de trabalho na ordem correta, depois fechar o resultado é a maneira mais eficaz.

caso contrário, você acabará com muitos ciclos de CPU desperdiçados:

  • assuma que seu resultado vai para 'first.zip'
  • todos os arquivos de '2.zip', '3.zip' etc precisam ser descompactados e, em seguida, compactados novamente em 'first.zip'
  • em '2.zip' existe um arquivo 'foobar.txt' e em '3.zip' existe outro arquivo 'foobar.txt'. fundindo-o da maneira que você deseja mesclar leva a 'comprimir X vezes'
  • o toc de um .zip está no final do arquivo: você adiciona mais conteúdo (no meio do arquivo .zip atualizando um arquivo no meio) e todo o arquivo deve ser reescrito

então, eu só uso ' descompacte ' wiseley:

% mkdir all
% for x in *.zip ; do unzip -d all -o -u $x ; done
% zip -r all.zip all

a ordem do descompactar é importante, eu não sei o padrão dos seus nomes de zip, mas eu iria extrair o arquivo zip mais novo primeiro, a opção '-u' do descompactar substitui apenas os arquivos se eles são mais recentes ou criam arquivos, se ainda não estiverem lá. Como resultado, você descompactará somente os arquivos mais recentes e zipará o resultado apenas uma vez.

    
por 08.01.2010 / 08:29
4

Basta usar a opção -g do ZIP, onde você pode anexar qualquer número de arquivos ZIP em um (sem extrair os antigos). Isso economizará um tempo significativo.

Veja também zipmerge

    
por 07.11.2013 / 16:58
4

Pode não ser o que você está procurando, mas a ferramenta de compilação gratuita do Ant inclui a capacidade de mesclar Zipfiles.

link

    
por 08.01.2010 / 09:28
1

Eu estava pensando que você poderia fazer o script dos arquivos sendo extraídos em um diretório temporário.

Existe um problema com esta linha de comando. Não consegui encontrar uma maneira de ordenar a descompactação de arquivos, para que um arquivo mais antigo substitua um novo arquivo. Este problema pode ser superado usando um descompactador que tem uma opção de linha de comando para substituir apenas se for mais recente. Eu uso principalmente o 7-Zip que não tem essa opção de linha de comando.

Além disso, este comando precisa de todos os arquivos zip no mesmo diretório. Não é um problema se todos os zips tiverem nomes exclusivos. Dito isto, o comando pode ser alterado para se adequar à sua situação.

for /f %f in ('dir /b *.zip') do "c:\program files-zipz" x %f -oc:\testdir -r -aoa

Para mudar isso para usar outro programa de descompactação, basta substituir "c:\program files-zipz" x %f -oc:\testdir -r -aoa pelo comando que você executaria em cada arquivo. Use %f como espaço reservado para o nome do arquivo que você deseja descompactar.

Eu tentei procurar um aplicativo polido, gratuito ou não, e não encontrei um.

Espero que isso dê a você um bom começo e o WinZip ou algo semelhante possa resolver o problema de sobrescrever.

Boa sorte.

    
por 08.01.2010 / 08:20
1

link :

zipmerge merges the source zip archives source-zip into the target zip archive target-zip. By default, files in the source zip archives overwrite existing files of the same name in the target zip archive.

    
por 29.12.2017 / 23:40
0

Se bem me lembro, o pkzip era um programa de linha de comando.

Ainda existe uma versão de linha de comando do ZIP que afirma ser compatível com o pkzip.

É chamado de Info-ZIP e deve haver uma versão para o seu SO.

    
por 08.01.2010 / 06:29
0

Procure pela linha de comando do winzip na rede. O Winzip tem várias versões de ferramentas de linha de comando para se adequar a qualquer versão do winzip que você possa ter instalado. A ferramenta de linha de comando WZZIP possui uma opção -f "freshen" que zipará os arquivos mais recentes somente daqueles que corresponderem ao nome de um arquivo no arquivo zip da saída de soma.

Use o WZunzip em uma instrução FOR como mostrado acima para descompactar um arquivo em um diretório e, em seguida, WZzip -f para incluir esses arquivos em um arquivo zip de soma de saída. Em seguida, o loop FOR se repete para trabalhar no próximo arquivo de entrada para saída para o único arquivo de saída de soma. A ordem dos arquivos de entrada não importa, pois o WZzip -f só incluirá no arquivo de saída se os dados de entrada forem mais recentes do que o que já está no arquivo de saída. Todos os arquivos que não existem no arquivo de saída também serão adicionados. Em seguida, você pode descompactar o resultado em uma pasta e, em seguida, zipá-lo novamente para obter um arquivo de resultados eficiente. Você pode até fazer isso automaticamente após o loop FOR no final do arquivo de lote.

    
por 19.08.2015 / 07:12

Tags