Respostas:
alcatrão
fecho eclair
O fato de o zip compactar os arquivos separadamente afetará as taxas de compactação, principalmente em muitos arquivos semelhantes pequenos.
(Pelo menos, isso estava exatamente correto há uma década.)
O Tar preserva muito mais metadados que o Zip, veja minha comparação (está um pouco desatualizada):
(Clique para ampliar)
O alcatrão passa em 65% dos testes, enquanto o Zip passa apenas em 17%. Disponibilizei a suíte de testes no github, sob licença BSD, para que você possa experimentar se tiver Mac. Para o Linux, não tenho certeza se existem metadados, portanto esses testes podem não ser relevantes.
A eficiência pode ser medida de diferentes maneiras:
Também há outras perguntas, como "Quão comuns são as ferramentas para manipular os arquivos resultantes?"
Assim, por exemplo, bzip2
cria arquivos menores que gzip
, mas pode demorar significativamente mais. Além disso, na minha experiência, gzip
é universal em sistemas similares ao Unix, mas bzip2
ainda não é (embora seja muito comum e geralmente fácil de obter).
Como Wim observou, o alcatrão em si não se comprime. Se você adicionar compactar o tar (por exemplo, para obter um arquivo .tar.gz ou .tar.bz2), estará compactando o arquivo tar inteiro de uma só vez. Por outro lado, o zip compacta cada arquivo individualmente.
A eficiência depende da carga de trabalho. Especificamente, o zip permite acessar arquivos individuais diretamente. Com o tar, você deve primeiro procurar nos arquivos indesejados (compactados) antes. O desempenho da compactação depende do que você está compactando. tar
com bzip2
muitas vezes é melhor para um grande número de arquivos semelhantes (por exemplo, um diretório de origem). zip
Pode ser melhor se cada arquivo tiver um conteúdo muito diferente.
Os arquivos zip contêm um diretório central de seu conteúdo no final (é mais provável que você evite ter que criar o diretório antecipadamente, onde você ainda não sabe o que estará lá dentro). Isso permite extrair rapidamente arquivos únicos sem precisar descompactar todo o arquivo morto: basta ler o diretório do arquivo morto e extrair apenas o necessário. No entanto, isso exige que todo o arquivo seja acessível e requer acesso aleatório, disponível apenas em dispositivos de bloco (disquetes, discos rígidos). Além disso, o diretório de arquivamento é vulnerável: se o arquivamento for truncado por algum motivo, será necessário um trabalho pesado para extrair qualquer coisa útil do arquivamento.
Os arquivos zip foram criados para uso do BBS, onde era importante poder agrupar o conteúdo de um diretório em um único arquivo (e compactado) - em vez de precisar fazer o download de milhares de arquivos únicos. Muito parecido com a maioria dos sites, os pacotes são baixados até hoje, pelos mesmos motivos.
Os arquivos Tar foram criados para agrupar backups a serem usados em unidades de fita, portanto, para acesso seqüencial . Não há diretório central; em vez disso, o arquivo contém blocos de cabeçalho em intervalos regulares, indicando quais arquivos serão seguidos nos próximos blocos. Os arquivos de alcatrão devem ser lidos de uma só vez; se apenas um arquivo for extraído, o arquivo será lido sequencialmente, começando desde o início até que o arquivo solicitado seja encontrado (que também pode estar no final). A compressão é aplicada em cima disso; cada um dos vários programas de compressão que são aplicadas aos arquivos tar ( compress
, gzip
,bzip2
etc.) são compressores de fluxo e não alteram a natureza seqüencial do arquivo em nenhum assunto. Na pior das hipóteses, você precisaria de um pouco mais de blocos até poder começar a extrair.
Isso pode parecer uma diferença trivial, mas de fato representa um oposto polar na filosofia. Nos arquivos zip, sempre há a necessidade de ter o arquivo inteiro em mãos para fazer alguma coisa útil, enquanto um arquivo tar pode ser transmitido para um pipeline. Posso fazer o download de um grande arquivo tar e começar a extraí-lo desde o início, assim que os primeiros blocos chegarem (e talvez interrompa o download assim que obtiver o arquivo que estou procurando). Para um arquivo Zip, tenho que esperar até que o diretório do arquivo apareça, que chega no final do arquivo. Mas uma vez eu faço tem o arquivo inteiro na mão, extraindo conteúdo parcial a partir dele será muito mais rápido de um arquivo tar.
Ambos os formatos têm um ponto muito forte, dependendo de onde e como são usados. Como os pipelines (e, portanto, a noção de streaming de dados de um processo para outro) realmente existem apenas no mundo Unix, a principal vantagem dos arquivos tar é perdida em outros sistemas, e é por isso que os arquivos Zip são muito mais populares lá. Mas os arquivos tar são mais flexíveis, e é por isso que os prefiro sempre que tenho uma escolha.
Como o outro já disse, o tar cria um grande "bloco" de todos os arquivos que podem ser compactados com um compressor de fluxo como gzip ou bzip2.
A desvantagem disso é que você precisa descompactar o arquivo inteiro para acessar um arquivo dentro do arquivo morto.
A vantagem disso é que a taxa de compactação geralmente é maior, principalmente quando os arquivos compactados são muito semelhantes.
Outros empacotadores como "rar" têm um "modo de bloqueio" (ou similar) para ter o mesmo efeito.