Qual é o método de compactação mais rápido para um grande número de arquivos?

14

Preciso compactar um diretório com cerca de 350.000 arquivos relativamente pequenos que totalizam cerca de 100 GB no total. Estou usando o OSX e atualmente estou usando a ferramenta "Compactar" padrão que converte esse diretório em um arquivo .zip. Existe uma maneira mais rápida de fazer isso?

Espinho
fonte
Você provavelmente não pode vencer o tar, pois na verdade não compacta, apenas arquiva, sem opções específicas que permitem isso. Em respostas, eu adoraria ver a prova, nenhuma opinião ...
Daniel Beck
1
Depende da compressão que você deseja.
ta.speot.is
1
Acabei usando tar e, por motivos de velocidade, ainda não tentei compactá-lo. Foi capaz de concluir a tempo para o que eu precisava. Obrigado!
Spike
@ DanielBeck, o problema com o tar é que eles não mostram a árvore de diretórios. Portanto, para obter uma "visão", precisamos descompactar todo esse alcatrão. Existem alternativas para o tar que mostra a exibição do diretório?
Pacerier

Respostas:

15

Para diretórios, eu usaria um tarcanal bzip2com compressão máxima.

uma maneira simples de ir é,

tar cfj archive.tar.bz2 diretório a ser arquivado / 

Isso funciona muito bem se você não pretende buscar pequenos conjuntos de arquivos fora do arquivo morto
e planeja extrair a coisa toda quando / onde for necessário.
No entanto, se você fazer deseja obter um pequeno conjunto de arquivos para fora, não é muito ruim.

Prefiro chamar esses arquivos filename.tar.bz2e extrair com a xfjopção ' '.

O tubo de compressão máxima se parece com isso,

tar cf - diretório a ser arquivado / | bzip2 -9 -> archive.tar.bz2  
# ^ coloque o tarball a partir daqui para compactar ^ no arquivo morto. 

Nota: o bzip2método ' ' e mais compactação tendem a ser mais lentos que o normal gzip' tar cfz'.

Se você tiver uma rede rápida e o arquivo for colocado em uma máquina diferente,
poderá acelerar com um cano na rede (efetivamente usando duas máquinas juntas).

tar cf - dir / | ssh usuário @ servidor "bzip2 -9 -> /target-path/archive.tar.bz2"  
# ^ direciona tarball pela rede para compactar ^ e arquivar em uma máquina remota.

Algumas referências

  1. Jornal do Linux: Ferramentas de compactação comparadas , 28 de julho de 2005
  2. gzip vs. bzip2 , 26 de agosto de 2003
  3. Uma referência rápida: Gzip vs. Bzip2 vs. LZMA , 31 de maio de 2005
nik
fonte
2
O interlocutor pediu o método mais rápido, compactar um alcatrão de 100 Gb levaria uma vida! Chega um momento em que o espaço em disco é tão barato que levar eras para espremer todo último pedaço de redundância possível é apenas um desperdício sem sentido de recursos, a menos que seja absolutamente necessário. Com a maior parte do uso do disco ocupada no espaço livre, compactar o tar com -1 provavelmente faria o trabalho bem o suficiente e permitiria passar para a próxima tarefa alguns meses antes!
Andy Lee Robinson
Embora eu concorde que provavelmente não vale a pena compactar um arquivo de 100 GB na totalidade, não acho que o bzip2 demore linearmente mais tempo para 100 GB do que para 1 GB (digamos). Gostaria de ver alguma teoria ou dados para mostrar de qualquer maneira.
Nik 30/07
Entendo que o dicionário do bzip2 é adaptável, portanto, ele está constantemente procurando por novas redundâncias dentro de sua janela de pesquisa até o final do arquivo. Sujeito à homogeneidade da entropia do arquivo, ele deve ser relativamente linear. Seria um compressor ruim que assumiu que tinha tudo o que precisava desde o início do arquivo para poder comprimir o resto rapidamente, mas em alguns casos isso pode ser tudo o que é necessário, embora haja maneiras melhores de envelhecer do que trabalhar com ele. empiricamente com conjuntos de dados de 100 GB!
Andy Lee Robinson
7

Esse cara fez uma pesquisa sobre isso. Parece que .zip comprime arquivos maiores mais rapidamente. No entanto, produz um dos maiores tamanhos de compactação. Também parece que ele estava usando utilitários do Windows, mas aposto que o utilitário do OSX é quase tão otimizado.

Aqui está um excelente site onde numerosos utilitários de compactação foram comparados quanto à velocidade em muitos arquivos. Existem muitos outros testes nesse site para determinar o melhor utilitário para você.

Grande parte da velocidade tem a ver com o programa que você usa. Eu usei o utilitário 7zip para Windows e acho isso muito rápido. No entanto, a compactação de muitos arquivos leva muito tempo, não importa o que aconteça. Ou você pode simplesmente tar a coisa toda e não compactá-la ... Pessoalmente, eu odeio descompactar arquivos grandes para ter cuidado se é isso que você quer fazer.

Dennis
fonte
0

Eu prefiro usar

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

para mover arquivos para outro servidor e cobri-los ao mesmo tempo

oussama fahd
fonte
1
O que já é sugerido na resposta superior do @nik. Não há necessidade de duplicar para dar ênfase, apenas vote outra resposta ou adicione um comentário se você tiver algo substantivo, mas não quiser dar uma resposta envolvida. ; o)
pbhj 21/11