Linux - Existe uma maneira de converter arquivos .bz2 em arquivos .tar.bz2 usando pipes?

5

Existe uma maneira de converter um arquivo .bz2 em um arquivo .tar.bz2 sem descompactar todo o disco e compactá-lo novamente? O tamanho descomprimido é maior que o meu disco. Como o bz2 opera em blocos, parece que você pode simplesmente descompactar um bloco, canalizá-lo, compactá-lo novamente, remover o bloco descompactado da memória, etc.

Eu perguntei este nos fóruns do Ubuntu e não encontrei uma resposta.

    
por endolith 11.10.2009 / 20:30

2 respostas

3

Atualização: Minha resposta original não funciona, desculpe. tar não aceita um fluxo de dados de STDIN como entrada, então o primeiro comando falha.

A única maneira que posso pensar em realizar o que você deseja é escrever seu próprio programa para adicionar os cabeçalhos tar necessários e o conteúdo ao redor do seu fluxo de dados. Então você poderia escrever:

$ bzcat foo.bz2 | stream-to-tar | bzip - > foo.tar.bz2

... e (supondo que seu programa obtenha o formato tar correto) você pode descompactá-lo com um tar xf foo.tar.bz2 padrão.

Provavelmente não é assim que você quer fazer, já que não fornece nenhuma das vantagens habituais de tarar o arquivo em primeiro lugar.

$ bzcat foo.bz2 | tar cjf foo.tar.bz2 -

Agora, o problema é que o tar não inclui nenhum sistema de arquivos, porque tudo que fornecemos é um fluxo de dados descompactado. Isso significa que você precisa descomprimir / descompactar assim:

$ tar --to-stdout -xjf foo.tar.bz2 > foo

    
por 11.10.2009 / 21:43
0

Acho que você descobrirá que a resposta é: você não faz isso. A compactação obtida de um arquivo .tbz2 em comparação com um arquivo .bz2 é muito pequena se você compactou com --best . Aqui está um exemplo sobre um log de erros do httpd:

 39M ./httpd-error.log
904K ./httpd-error.log.bz2
904K ./httpd-error.log.tbz2

Caso contrário, você terá que fazer isso com uma parada no disco rígido.

    
por 30.10.2009 / 21:44

Tags