Estimando o tamanho do arquivo compactado usando um parâmetro de lista

1

Atualmente, estou compactando uma lista de arquivos de um diretório no seguinte formato:

tar -cvjf test_1.tar.gz -T test_1.lst --no-recursion

O comando acima comprimirá apenas os arquivos mencionados na lista. Eu estou fazendo isso porque essa lista é gerada de forma que cabe um DVD. No entanto, durante a compactação, a taxa de compactação diminui o tamanho estimado do arquivo e ainda há muito espaço no DVD. Isso é algo como um algoritmo Knapsack.

Gostaria de estimar o tamanho do arquivo compactado e adicionar mais arquivos à lista. Descobri que é possível estimar o tamanho do arquivo usando o seguinte comando:

tar  -cjf - Folder/ | wc -c

Este comando não recebe um parâmetro de lista. Existe uma maneira de estimar o tamanho do arquivo compactado? Eu também estou olhando para opções como scripts perl etc.

    
por Sai 19.03.2012 / 20:53

1 resposta

3

A compressão depende muito da repetição do texto que está sendo compactado. Se os seus arquivos são de texto simples e todos muito semelhantes, então você terá uma ótima compactação, se eles forem diferentes, a compactação começará a sofrer. E se eles já estiverem compactados (ou seja, JPG, MP3, etc), a compactação será ainda menor.

Como você sugeriu com o algoritmo "knapsack", com tempo suficiente e recursos de CPU, deve ser possível tentar todas as combinações de arquivos em um único arquivo tar compactado. Infelizmente isso pode demorar muito tempo.

Supondo que seus arquivos são semelhantes (ou seja, todos são na maior parte texto ou todos são arquivos semelhantes), você pode obter uma estimativa aproximada compactando cada arquivo individualmente e, em seguida, adicionando os tamanhos para uma estimativa em uma compactação total arquivo tar.

A única queda é a estimativa falhará e produzirá um arquivo tar.bz2 final menor se os arquivos forem semelhantes e o algoritmo de compressão puder usar as semelhanças com sua vantagem.

    
por dan_linder 19.03.2012 / 21:30