Como posso avaliar a melhor opção de formato de arquivo para compactar arquivos?

24

Em geral, observei o seguinte:

  • Os arquivos ou ferramentas do Linux-y usam bzip2 ou gzip para distribuir arquivos
  • Os arquivos ou ferramentas do Windows-y usam ZIP para distribuir arquivos
  • Muitas pessoas usam o 7-Zip para criar e distribuir seus próprios arquivos

Questões:

  • Quais são as vantagens e desvantagens desses formatos, que parecem ser formatos abertos? Quando / por que devo escolher um (por exemplo, 7-Zip) em vez de outro (por exemplo, ZIP)?
  • Por que a tendência acima parece se manter, apesar de todos serem formatos portáteis? Há vantagens específicas em usar um formato de arquivo específico em uma plataforma específica?
Mehrdad
fonte
1
Veja também: stackoverflow.com/questions/2397474/…
Thomas Bonini
@Sathya, @Andreas: Obrigado pelos links, esses são úteis e respondem a partes da minha pergunta. :)
Mehrdad
1
A compactação é um campo bastante complexo, e nenhum algoritmo pode produzir resultados ótimos para tudo - além disso, é um problema no qual você pode usar recursos e obter melhores resultados, mas também um que pode ser feito quase tão bem em muito menos tempo. Alguns algoritmos se concentram em ser rápidos e com pouca memória, outros em produzir o menor arquivo possível, independentemente do tempo que leva ou se você precisa de 12 GB de RAM (não exagerando) para fazê-lo, etc.
Phoshi
1
@ Phoshi, isso deve ser uma resposta.
Yitzchak

Respostas:

16

Há uma grande variedade de formatos e métodos de compactação disponíveis, alguns não são compactados e são projetados para armazenar vários arquivos em um arquivo e outros compressores experimentais mais recentes ( baseados no PAQ ) são projetados para compactar o mais agressivamente possível, independentemente do tempo necessário para executar a operação.

Você precisa avaliar os recursos necessários na escolha do método de compactação e também considerar o contexto em que ele será usado.

Diferentes recursos e considerações incluem:

  • Capacidade de compactação - reduz o arquivo significativamente o suficiente?
  • Facilidade de uso - Se o arquivo estiver indo para outro usuário, o arquivo será fácil de extrair ou será necessário instalar mais software?
  • Proteção por senha e / ou criptografia - Essas medidas de segurança são necessárias?
  • Suporte a vários volumes - Se a mídia de destino exigir que o arquivo seja dividido em partes apropriadas, o formato suporta isso de maneira elegante. Por exemplo, 650 MB para um CD.
  • Reparo e recuperação - Se o arquivo ficar parcialmente corrompido, ele oferece um registro de recuperação para ajudar na restauração de dados?
  • Suporte Unicode - O arquivador suporta nomes de arquivos internacionais ou apenas ASCII padrão?
  • Requisitos do sistema - Compressores modernos como o 7-Zip oferecem a capacidade de aumentar a eficiência da compactação usando um dicionário maior (um dicionário é uma referência de dados comumente repetidos em um arquivo compactado), mas isso, por sua vez, aumenta o consumo de memória tanto na compactação quanto na compactação. tempo de descompressão.
  • Suporte à extração automática - O arquivo morto pode ser compactado em um arquivo executável que oferece facilidade de uso para quem precisa usá-lo? (Lembre-se de que você só pode criar um extrator automático para uma única plataforma. Em geral, um extrator automático do Windows não funciona no Linux por padrão, a menos que seja executado em uma camada de compatibilidade como o Wine).
  • Atributos do sistema de arquivos - O compressor armazena metadados e permissões relevantes do sistema de arquivos que podem ser preservados no ponto de extração?

Em geral, o ZIP é o formato mais onipresente, mas tamanhos acima de 4 GB geralmente não são suportados (se houver), o suporte à segurança geralmente é considerado ruim (a senha padrão pode ser comprometida com um ataque de texto sem formatação e criptografia adicional é geralmente implementado como um derivado não oficial do formato pelos fornecedores comerciais de software ZIP).

Além disso, a maioria dos outros formatos populares terá algum tipo de suporte em todos os sistemas operacionais, instalando mais software.

Minha escolha pessoal é o 7-Zip , pois possui compactação excelente e flexível; apesar de ter uma interface de usuário peculiar no Windows. Existem descompressores para Linux e Mac OS X (embora não sejam baseados em GUI como padrão).

Ruairi Fullam
fonte
3
Se o arquivo é destinado à distribuição, também é importante considerar seu público-alvo e usar um formato suportado por padrão em sua plataforma. A acessibilidade pode ser mais importante do que as outras considerações nesse caso.
Hammar
+1 obrigado pela informação, embora fosse melhor mencionar quais formatos suportam esses pontos. :)
Mehrdad
Fiquei tentado, mas há uma infinidade de formatos disponíveis, o que levaria muito tempo para listar. Wikipedia tem uma matriz boa característica de formatos de compressão que podem ajudar: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam
1
O histórico ensina uma lição importante quando se trata de arquivos de extração automática. Há arquivos de extração automática de duas décadas atrás, que as pessoas não podem mais se extrair porque suas máquinas não podem executar programas MS / PC-DOS ou porque os programas de extração automática falham como resultado de alterações no processador ou porque as extratores se queixam de que os discos estão cheios quando eles não estão, uma vez que não esperam discos de ser tão grande, ou ...
JdeBP
Esse ponto é certamente discutível, não encontrei esse problema em particular, mas posso vê-lo ocorrendo; Suponho que seja tudo uma questão do objetivo final da criação do arquivo e da longevidade esperada dos arquivos utilizados. Certamente, se você tiver um arquivo antigo difícil de extrair da era do DOS, poderá usar o DOSBox ou até criar uma VM, se necessário.
Ruairi Fullam
8

Uma coisa que vem à mente é uma postagem no blog (de dois anos) de Jeff Atwood: Compactação de arquivos na era de vários núcleos . Nesse artigo, ele descobre que o bzip2 supera o 7-zip ao executar mais de dois núcleos.

matpe
fonte
+1 omg! Eu não sabia disso. A taxa de compressão parece não valer a pena, no entanto. :)
Mehrdad
2
Esse post tem mais de 2 anos. O 7-zip não funciona melhor com mais de dois núcleos agora?
Cregox 4/07
O BZIP2 é compactado com mais eficiência em vários núcleos porque é compactado em blocos de 100 a 900 KB, portanto, pode espalhar blocos por núcleos separados, mas a eficiência da compactação é perdida, pois esses blocos são considerados distintos um do outro.
Ruairi Fullam
4

Para sua primeira pergunta, o 7-Zip é um arquivador que pode usar muitos algoritmos para compactar e descomprimir dados.

Para sua segunda pergunta, verifique se a plataforma suporta ferramentas compatíveis com o formato fornecido. Por exemplo, eu evitaria usar o RAR em um Mac. Embora seja possível usar e existam utilitários gratuitos que o suportam, eles não possuem a interface muito mais rica que os utilitários do Windows que oferecem suporte ao RAR (na minha experiência).

soandos
fonte
Considerando que eu pessoalmente odeio os programas gráficos rar e sempre uso a linha de comando, mesmo no Windows.
CarlF 03/07/19
4

Como outros já mencionaram, a escolha de um formato de compactação específico depende muito do uso e do público-alvo.

  • Os arquivos .tar.gz e tar.bz2 são ideais para uso em sistemas Linux (e por extensão para compartilhar arquivos com usuários do Linux) porque as ferramentas tar, gzip e bzip2 são onipresentes na plataforma e porque o formato .tar está cheio suporte para permissões Unix e outras propriedades específicas da plataforma. A escolha entre gzip e bzip2 para compactar o arquivo tar é principalmente uma decisão sobre velocidade versus taxa de compactação, com o bzip2 entregando arquivos menores, mas com uma velocidade de compactação muito mais lenta. As desvantagens desses formatos incluem menos compatibilidade com o Windows e a (potencial) necessidade de descompactar todo o arquivo morto para extrair um único arquivo.

  • Os arquivos ZIP podem ser extraídos na maioria das plataformas usando ferramentas nativas; portanto, é a opção ideal para enviar um arquivo para um usuário não técnico que não se sentiria à vontade com a instalação de software de arquivo de terceiros, como o 7-Zip. O nível de compactação não é tão bom quanto os algoritmos mais avançados e não suporta permissões Unix, mas é um excelente formato se você quiser enviar um arquivo de fotos de férias para sua avó, por exemplo. O ZIP também fornece proteção básica por senha e pode extrair rapidamente um arquivo de qualquer lugar do arquivo morto.

  • O 7-Zip é bom se você deseja as melhores taxas de compactação possíveis. Como o ZIP, ele não suporta permissões ou propriedade de arquivos Unix e também não é instalado por padrão na maioria das plataformas, o que torna um pouco mais trabalhoso de usar, mas pode valer a pena no Windows se os ganhos da taxa de compactação forem importantes. Em um ambiente totalmente Linux, seria melhor usar as ferramentas de compactação 'xz' ou 'lzma' junto com o tar, que operam exatamente da mesma maneira que 'gzip' e 'bzip2', mas usam o algoritmo LZMA mais avançado, como 7 -Fecho eclair.


fonte
2

Apenas como exemplo, eu uso os formatos mencionados nesses casos:

  • Arquivos de texto (principalmente logs): bz2
  • Coleção de arquivos a serem distribuídos (por exemplo, código fonte): gz (tar.gz realmente).
  • Arquivos variados: 7zip. Eu posso comprimir quase tudo de uma maneira muito eficiente. Criptografia de plataforma cruzada, código aberto, estável, leve, arquivo (cabeçalho e dados), ... Você pode pedir mais alguma coisa? :)

Evito completamente o RAR e sempre que recebo o arquivo RAR de alguém que conheço, digo para ele parar de usar esse formato, pois é apropriado e que provavelmente ele / ela está usando software não licenciado (a maioria das pessoas baixa a versão de avaliação do WinRAR e continua usando para sempre).

PS: Eu corro o Ubuntu (principalmente) e o Windows (inicialização dupla e VirtualBox).

glarrain
fonte
1

Há pelo menos quatro trabalhos separados que geralmente são confundidos porque as ferramentas populares os integram:

  1. Arquivamento: a capacidade de combinar vários arquivos (incluindo metadados) em um único arquivo, preservando o máximo possível de coisas. No mundo Linux / Unix, o arquivamento é tradicionalmente feito no formato de arquivo TAR.
  2. Compactação: a capacidade de minimizar sem perdas o tamanho de um fluxo de dados binários. No mundo Linux / Unix, isso é tradicionalmente feito pelo GZip e BZip2.
  3. Criptografia: a capacidade de embaralhar dados com chaves
  4. Soma de verificação: a capacidade de detectar (e possivelmente corrigir) erros.

A onipresença de .tar.gz e .tar.bz corresponde à filosofia Unix de pequenas ferramentas executando bem um único trabalho, em vez de uma única ferramenta que faz tudo. O formato do arquivo TAR não suporta compactação ou criptografia, mas pode ser compactado ainda mais por qualquer compressor (inclusive como .tar.zip ou .tar.7z). O trabalho do GZip e BZip2 é simplesmente comprimir um fluxo de arquivos para outro fluxo de arquivos; a camada de compressão não precisa se preocupar em preservar os metadados, a criptografia ou a soma de verificação. Com o tempo, porém, vários atalhos foram feitos no tarprograma para trabalhar com um compressor de forma mais conveniente.

Nos formatos zip e 7z, esses trabalhos separados são executados por um único programa em um único formato de super super arquivo.

Por que a tendência acima parece se manter, apesar de todos serem formatos portáteis? Há vantagens específicas em usar um formato de arquivo específico em uma plataforma específica?

Como tem sido assim, os códigos-fonte do programa são tradicionalmente distribuídos como .tar.gz ou .tar.bz2, porque preservar permissões de arquivo, tempo de modificação etc. são importantes para várias ferramentas usadas na programação (por exemplo, make).

A etapa separada de arquivamento e compactação funcionou muito bem por anos, possui uma clara vantagem de poder misturar e combinar livremente arquivamento e compactação, e sua desvantagem (um processo de compactação em duas etapas) pode ser facilmente contornada através do desenvolvimento de ferramentas mais inteligentes ( o programa de compactação linux mais moderno será compactado diretamente para .tar.gz ou .tar.bz2, ocultando a etapa intermediária).

Não há motivos fortes para mudar para outros formatos de arquivo, os compressores mais novos não têm uma taxa de compressão significativamente melhor para justificar a quebra da tradição e o alcatrão pode preservar tudo o suficiente.

Lie Ryan
fonte