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?
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.
compression
zip
7-zip
jjnguy
fonte
fonte
Deflate
formato, 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.Respostas:
Para criar o menor arquivo ZIP padrão que o 7-Zip pode criar, tente:
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:
Que são:
fonte
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:
Compacto regularmente logs de servidor / texto (60 MB ou mais) usando essas opções e elas geralmente saem com 1-2% do tamanho original.
fonte
Eu comparo o db.fdb 1,2 GB (1236598784 B) no servidor Ubuntu 14.04.03 com o p7zip [64] 9.20 na VM:
e tenha esses resultados:
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.
fonte
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.
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 comoEsses 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.
fonte
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.
fonte