Quais são as melhores opções para compactar arquivos usando o 7 Zip?

62

Geralmente, tenho que reunir arquivos de log e enviá-los para um servidor central (de propriedade de outra empresa). O servidor central tem um limite de tamanho do arquivo, por isso estou tentando criar o menor arquivo possível que ainda esteja no formato zip.

Qual é a melhor configuração para compactar um arquivo de texto em um formato zip quando minha única necessidade é de um tamanho pequeno?

Opções 7zip

Fiz a ultracompressão óbvia e escolhida e notei que o LZMA faz um trabalho melhor do que o esvaziamento, mas existem muitas outras permutações de opções para eu testar todas elas.

jjnguy
fonte
11
Dividir o zip em vários arquivos é uma opção?
JaredMcAteer
3
Assim que você escolhe qualquer coisa, menos o Deflateformato, não é mais um arquivo .zip "normal", mas um arquivo zip "estendido", pioneiro no WinZip. Eles originalmente mantiveram a extensão como .zip, para grande consternação (já que a maioria das ferramentas normais de manipulação de zip não pode lidar com elas), mas a maioria dos arquivadores usa o .zipx agora para distingui-los dos arquivos .zip tradicionais. Se você pode usar o LZMA, mude para .7z e escolha PPMd - ele deve compactar melhor (e mais rápido!) Os arquivos de texto.
afrazier
11
@afrazier: "A Especificação de Formato de Arquivo .ZIP documenta os seguintes métodos de compactação: armazenado (sem compactação), Encolhido, Reduzido (métodos 1-4), Imploded, Tokenizing, Deflated, Deflate64, bzip2, LZMA (EFS), WavPack, PPMd . " en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
endolith
11
@endolith: bzip2, lzma, wv e ppmd são adições muito recentes ao formato do arquivo. Não é nem seguro assumir que seu destinatário pode lidar com o deflate64, muito menos com as novidades.
afrazier
11
defina "ferramentas zip normais". Atualmente, a maioria das "ferramentas zip normais", como 7z e winrar, podem extrair arquivos 7z.
Phuclv

Respostas:

61

Para criar o menor arquivo 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 obter a melhor compactação ZIP padrão?

Caso contrário, se você não se importa com o padrão ZIP, use 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
kenorb
fonte
2
@Tek: Por quê? Não é uma boa. A pergunta era sobre o uso do "formato ZIP padrão", portanto a resposta não deve ser a especificação do LZMA. -ms = on é para .7z, não para arquivos zip padrão. -md está relacionado ao BZip2, então não espero que isso afete o ZIP (ou mesmo o LZMA). -mfb = 64 é um valor não otimizado: -mfb = 258 cria arquivos zip menores. E essa resposta nem menciona -mpass = 15, que pode afetar arquivos zip. Esta é uma resposta bem formatada que, infelizmente, está errada de várias maneiras.
TOOGAM
6
Eu usaria lzma2
Lance Badger
Se você consultar as Perguntas frequentes sobre o 7-zip, ele afirma que as versões mais recentes do 7z podem ter desempenho pior do que as versões anteriores em algumas circunstâncias. Leia as Perguntas frequentes para obter mais detalhes, mas use o 'qs' no campo Parâmetros na GUI ou use -mqs na versão da linha de comando para usar o método antigo de classificação por extensão de arquivo. 7-zip.org/faq.html .
drojf
13

Se você pode usar o formato .7z em vez de apenas .zip, eu simplesmente usaria o PPMD com as seguintes opções e deixaria todo o resto conforme definido pelo Nível de compactação:

  • Formato de arquivo: 7z
  • Método de compressão: PPMD
  • Nível de Compressão: Ultra

Compacto regularmente logs de servidor / texto (60 MB ou mais) usando essas opções e elas geralmente saem com 1-2% do tamanho original.

Virola de Umber
fonte
Para textos como arquivos de log, o ppmd é definitivamente o caminho a percorrer. No entanto, a pergunta mencionou que precisava permanecer no formato zip, o que pode não funcionar com o PPMD.
precisa
Só tentei zip com PPMD e Windows Explorer abre o conteúdo sem reclamação aqui no Windows 7
Umber Ferrule
3
Eu notei isso também. Abre o conteúdo muito bem. No entanto, quando tentei exibir um dos arquivos dentro do arquivo zip, ele falhou.
Brian Minton 23/12
2
Por que o PPMD ​​é um método superior de compactação para arquivos de texto?
user598527
11
O LZMA2 fornece melhores resultados para arquivos de texto que o PPMD.
T3rm1
7

Eu comparo o db.fdb 1,2 GB (1236598784 B) no servidor Ubuntu 14.04.03 com o p7zip [64] 9.20 na 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 tenha 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"

Eu acho que o segundo método funciona bem = (quase) melhor comprimir com melhor tempo. Mas, para melhor "visualização" e fácil de lembrar, é o primeiro método - com arquivos pequenos e nenhum ponto de compactação máxima. Entre o método 2 e 3, não temos 7z extra menores, mas pagamos quase dois a mais tempo para a compactação. Qualquer um decide por conta própria.

SULIMa
fonte
7

Após muita experimentação, pesquisando a documentação detalhada do 7zip e lendo parte do código-fonte 7z referente aos parâmetros avançados do LZMA2, aqui está um método melhor abaixo. Reduziu alguns arquivos de teste do mundo real de 1 GB mais de 2 a 4 vezes melhor do que as soluções anteriormente aceitas postadas aqui ou mesmo na página de manual 7z.

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 você pode obter um desempenho ainda melhor no 7zip com a aprovação de opções avançadas do LZMA2 como -m0=LZMA2:27, ou -m0=LZMA2:d25, ou uma matriz de parâmetros como

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

Esses parâmetros não pareciam ser respeitados pelas versões 7z que testei, mas convém explorar mais ou corrigir o código 7z para analisá-los adequadamente. Ou talvez deva funcionar e está apenas quebrado nas compilações que foram testadas.

91735472
fonte
uau, isso fez uma diferença muito grande. No meu arquivo, experimentei muitas outras sugestões, incluindo outras respostas aqui, e o melhor resultado que obtive foi 99MB versus 85MB usando essas configurações.
user9399 25/08
0

Defina o campo "dividir em volume, bytes" para o tamanho máximo permitido do arquivo do servidor (em bytes, eu acho, embora pareça aceitar as abreviações comuns como "KB" e "MB"). Se o arquivo zip exceder esse tamanho, o 7-zip o dividirá em vários arquivos automaticamente, como integration_serviceLog.zip.001 , integration_serviceLog.zip.002 , etc. disquetes.) Você precisará de todos os arquivos para descompactá-los. Use isso em vez de se preocupar com as melhores configurações absolutas de compactação a serem usadas para qualquer conjunto específico de arquivos, porque o que é melhor para um arquivo pode ser diferente para outro arquivo e você não precisa passar por isso toda vez que precisar copiar logs.

Rob Kennedy
fonte
11
Estou preocupado com a forma como as pessoas do outro lado descompactam os arquivos. Eu preciso que seja o mais simples possível para eles. Você sabe se é possível descompactar os volumes divididos usando o zip embutido do Windows ou o gzip?
Jjnguy
Aparentemente, não, o recurso interno da pasta zip do Windows não executa arquivos zip estendidos. Isso é muito ruim, já que esse é um recurso padrão do formato desde o Windows 3. Eu ficaria muito surpreso se o gzip não pudesse fazer isso. O WinZip definitivamente pode.
Rob Kennedy