Como compactar uma pasta grande em arquivos pequenos limitados a 20Mb?

8

Estou procurando uma maneira de compactar uma pasta grande em muitos arquivos de 20Mb. Eu não quero que o arquivo zip seja dividido em arquivos menores. Em vez disso, quero agrupar alguns sub-arquivos / pastas em grupos que tenham 20 MB quando compactados.

Se você souber como fazer isso, por favor, ajude!

Atualizar

Eu preciso usar apenas os arquivos compactados menores, que podem ser descompactados sozinhos.

Minha intenção é usar o virustotal.com para digitalizar uma pasta grande.

    
por Nam G VU 01.04.2011 / 13:38

7 respostas

8

No winzip: Adicione os arquivos ao zip iniciando o winzip e adicionando ou arrastando e soltando no winzip ou clique com o botão direito nos arquivos e no winzip 'add to zip ...'

Em seguida, no winzip:

Ações - Split na parte inferior do 'tamanho da peça', escolha 'outro tamanho', depois coloque 20 e selecione mb

Feito!

    
por 01.04.2011 / 15:25
6

O que você está propondo é essencialmente uma variação do Problema da Mochila , com a diferença adicional de que, devido ao processo compressão, você não começa a saber quanto de sua "mochila" de 20MB cada item ocupará.

A solução trivial, é claro, seria simplesmente zipar cada arquivo de forma independente, mas isso não reduz a contagem de arquivos, então eu suspeito que não seria uma solução satisfatória.

Se eu fosse apresentado a esse problema, suponho que começaria compactando cada arquivo individualmente para um local temporário (ou na memória, sem gravá-los em disco), apenas para obter um tamanho compactado aproximado para cada . Com essa informação, seria então possível decidir quais arquivos devem ser agrupados por qualquer uma das abordagens padrão para o Problema da Mochila e criar os arquivos zip reais.

Supondo que você tenha uma linguagem de script disponível para você e saiba como usá-la, eu esperaria que essa abordagem fosse bastante simples de automatizar; fazer isso manualmente seria muito tedioso se você tivesse mais do que um punhado de arquivos para lidar ...

    
por 04.04.2011 / 11:25
5

Deixar o zip fazer a divisão para você será muito mais fácil de automatizar do que tentar descobrir sozinho. Se sua meta é de arquivos compactados de 20 MB, você terá que estimar o tamanho compactado de cada arquivo antes de adicioná-lo ao arquivo. Existe uma razão pela qual você não quer apenas deixar o zip fazer a divisão para você? Veja como você faria isso com o gnu zip:

zip -s 20m -r myzip.zip mydir

Isso criará arquivos compactados de 20MB com números de índice incrementais no nome do arquivo.

    
por 01.04.2011 / 17:00
3

Não é uma perspectiva fácil, eu tenho medo.

Recentemente, escrevi um script para reunir arquivos em subdiretórios com tamanho não superior a 4,3 GB para facilitar o armazenamento em DVD, mas tudo isso foi descompactado.

Fazendo isso com compressão - agora há o desafio. Você não pode prever o tamanho dos arquivos após compactação - tudo o que você pode fazer é continuar adicionando arquivos ao zip em ordem decrescente de tamanho até exceder 20 MB e depois remover o último arquivo substituindo-o por um menor até cair abaixo de 20MB. Se você esgotar todos os arquivos e ainda for > 20MB, basta soltar o último arquivo e passar para o próximo zip.

Um pouco complicado de scripts e um processo lento e doloroso.

    
por 01.04.2011 / 13:55
3

No Linux existe um programa chamado zipsplit que faz exatamente isso. Faz parte do pacote zip padrão.

Pode ser executado assim:

zipsplit bigfile.zip -n 20000000

para dividir bigfile.zip em partes de no máximo 20 MB. E observe que arquivos contidos individuais não serão divididos. Assim, cada parte pode ser descompactada individualmente. O que também significa que, se houver um único arquivo que não cabe no tamanho máximo da peça, a divisão não será possível.

Atualização: Parece que há também binários para o Windows em info-zip.org, especificamente em ftp: //ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip para o Win 64.

    
por 24.02.2017 / 20:57
2

Eu sei que este é um tópico antigo, mas acabei de fazer isso com 7-zip .

Você precisa usar a opção "Dividir para volume":

    
por 30.03.2016 / 12:02
1

Dave parecia fornecer a solução programável mais próxima do que o OP solicitou. Descobri que isso poderia ser feito manualmente também, se as seguintes suposições forem tomadas (isto não é um problema técnico puro - é mais um problema organizacional do que técnico ):

  1. Como o OP requer que cada arquivo zip seja capaz de extrair todo o seu conteúdo independentemente , os arquivos que ultrapassarem 20 MB após a compactação devem ser tratados de uma das seguintes maneiras:
    • eles não devem ser considerados e, portanto, devem ser separados;
    • eles precisam ser divididos em volumes de 20 MB, como outras respostas sugeridas ( winzip , 7-zip ), e os arquivos resultantes não podem ser usados de forma independente (violando essa suposição de st ).
  2. Os arquivos compactados não precisam necessariamente ter exatamente 20 MB.
  3. Se for mais importante ter vários arquivos zip com o tamanho aproximado de 20 MB, a compactação pode ser feita sem compactação.

Ao usar este método com 7-zip (interface e terminal do Windows) eu preservei a compactação no zip recém-gerado arquivos.

Comece por compactar todos os arquivos em um único arquivo zip em uma pasta vazia (com o método de compactação desejado), por exemplo, ALL.zip e abra-o:

  1. Solicite a lista de arquivos e pastas clicando no tamanho ou na coluna compactada (compactada);
  2. Comece nos tamanhos menores e selecione arquivos / pastas que deseja agrupar em um zip;
  3. Pressione o botão Test para confirmar seu tamanho coletivo (isso considera sua compactação):
  4. PressioneobotãoExtractouCopyenquantoadicionaaofinaldocaminhodeextraçãoonomedeumanovapasta(porexemplo,plu_8MB)
  5. DentrodeALL.zipzip,excluaessesarquivosquevocêacaboudeextrair(evitandoreextraçõesincorretas)enavegueatéapróximapastaousubconjuntodearquivos;
  6. Repitaumdosseguintesitens:
    • etapasde1a5,sevocêpretendecriarumarquivozipindependente;
    • etapasde1a3ereutilizeomesmonomedepasta(etapa4)atéqueseustamanhoscoletivossejamdeaproximadamente20MB;
  7. DepoisdeterextraídotodooconteúdodeALL.zipempastasindependentes,excluaessezipeabraoterminalnessapasta<<>./a>;
  8. Tipo:

    for/F%iin('dir/b')do"C:\Program Files-zipz.exe" a -tzip %i.zip %i
    

    Pressione ENTER e isso irá gerar um arquivo zip para cada pasta que você acabou de extrair.

por 18.01.2017 / 17:51

Tags