2011-05-10 14:19:13 +0000 2011-05-10 14:19:13 +0000
69
69

Quais são as melhores opções a utilizar ao comprimir ficheiros usando 7 Zip?

Muitas vezes tenho de reunir ficheiros de registo e carregá-los para um servidor central (propriedade de outra empresa). O servidor central tem um limite de tamanho do ficheiro, por isso estou a tentar criar o ficheiro mais pequeno possível que ainda esteja no formato zip.

Qual é a melhor configuração para utilizar ao comprimir um ficheiro de texto para um formato zip quando a minha única necessidade é um ficheiro de tamanho pequeno?

Eu fiz a ultracompressão óbvia e escolhi, e reparei que o LZMA faz um trabalho melhor do que esvaziar, mas há demasiadas outras permutações de opções para eu as testar todas.

Respostas (6)

65
65
65
2014-04-15 15:15:36 +0000

Para criar o mais pequeno ficheiro ZIP padrão que o 7-Zip pode criar, tente:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

Fonte: Como posso conseguir a melhor compressão ZIP padrão?

Caso contrário, se não se importar com o padrão ZIP, utilize as seguintes configurações ultra:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

Que são:

-t7z 7z archive

-m0=lzma
       lzma method

-mx=9 level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on
14
14
14
2013-07-15 10:33:24 +0000

Se puder usar o formato .7z em vez de apenas .zip, eu simplesmente usaria PPMD com as seguintes opções e deixaria tudo o resto como definido pelo Nível de Compressão:

  • Formato de Arquivo: 7z
  • Método de Compressão: PPMD & - Nível de Compressão: Ultra

Compresso regularmente logs de servidor/texto (60MB+) usando estas opções e normalmente saem a 1-2% do tamanho original.

8
8
8
2019-06-17 16:25:32 +0000

Após muita experimentação, escavar a documentação detalhada do 7zip, e ler algum do código fonte 7z relativamente aos parâmetros avançados do LZMA2, eis um método melhor abaixo. Reduziu cerca de 1GB de ficheiros de teste do mundo real ** mais de 2 a 4 vezes melhor do que as soluções anteriormente aceites*** aqui publicadas ou mesmo na página 7z manpage.

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

A compressão LZMA2 é assumida aqui, mas poderá obter um desempenho ainda melhor no 7zip com a passagem de opções avançadas LZMA2 como -m0=LZMA2:27, ou -m0=LZMA2:d25, ou um conjunto de parâmetros como

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

Tais parâmetros não pareciam ser respeitados pelas versões 7z que testei, mas poderá querer explorar mais ou remendar o código 7z para os analisar correctamente. Ou talvez funcione e seja apenas quebrado nos builds que foram testados.

7
7
7
2016-08-15 13:27:49 +0000

Comparo para db.fdb 1,2 GB (1236598784 B) no servidor Ubuntu 14.04.03 com p7zip [64] 9.20 no VM:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

e tenho esses resultados:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

penso que o segundo método funciona bem = (quase) melhor compressão com o melhor tempo. Mas para uma melhor “vista” e fácil de lembrar é o primeiro método - com pequenos ficheiros e sem ponto de máxima compressão. Entre 2 e 3 métodos não obtemos 7z extra mais pequenos, mas pagamos quase duas vezes mais tempo para a compressão. Qualquer pessoa decide com o seu próprio método.

3
3
3
2019-12-05 09:37:09 +0000

Decidi fazer algumas experiências para encontrar empiricamente os parâmetros ideais de compressão.

A ferramenta que utilizei wa 7-ZIP finetuner . Esta ferramenta procura os parâmetros óptimos, simplesmente repetindo a compressão com parâmetros variáveis procurando a combinação óptima. Uma execução para um ficheiro pode por vezes demorar mais de uma hora, mesmo num computador rápido.

Os parâmetros que tenta são:

LC : number of Literal Context bits
LP : number of Literal Pos bits
PB : number of Pos Bits
YX : level of file analysis
FB : number of Fast Bytes

Deixei os parâmetros predefinidos de tamanho de dicionário como 512 MB e tamanho de bloco sólido Ligado. A ferramenta utiliza o método LZMA.

As melhores combinações de parâmetros em vários tipos de ficheiros foram as seguintes:

Note-se que os melhores valores não eram constantes mesmo para ficheiros do mesmo tipo.

Conclusão: Não há melhores opções* , pois cada ficheiro pode ter a sua melhor combinação única. Pode-se conduzir todos os parâmetros até aos seus limites, mas uma melhoria não é de todo garantida.

A combinação mais comum parece ser:

LC : 8
LP : 0
PB : 1
YX : 5
FB : 273

Algumas referências 7-Zip:

0
0
0
2011-05-10 14:37:36 +0000

Definir o campo “split to volume, bytes” para o tamanho máximo permitido do ficheiro do servidor (em bytes, penso eu, embora pareça aceitar abreviaturas comuns como “KB” e “MB”). Se o ficheiro zip exceder esse tamanho, o 7-zip irá dividi-lo em múltiplos ficheiros automaticamente, tais como integração_serviceLog.zip.001, integração_serviceLog.zip.002, etc. (Há muito tempo atrás, o PK Zip utilizava isto para percorrer ficheiros zip através de múltiplas disquetes). Será necessária a presença de todos os ficheiros para os descomprimir. Use isso em vez de se preocupar com as melhores definições de compressão para usar em qualquer conjunto de ficheiros em particular, porque o que é melhor para um ficheiro pode ser diferente para outro ficheiro, e não quer ter de passar por isto sempre que precisar de copiar registos.