Eu tenho uma máquina com 90% de uso do disco rígido. Quero compactar seus mais de 500 arquivos de log em um novo arquivo menor. No entanto, o disco rígido é muito pequeno para manter os arquivos originais e os compactados.
Então, o que eu preciso é compactar todos os arquivos de log em um único novo arquivo, um por um, excluindo cada original uma vez compactado.
Como posso fazer isso no Linux?
Respostas:
gzip
oubzip2
comprimirá o arquivo e removerá automaticamente o não compactado (esse é o comportamento padrão).No entanto, lembre-se de que, enquanto o processo de compactação, os dois arquivos existirão.
Se você deseja compactar arquivos de log (ou seja, arquivos contendo texto), pode preferir
bzip2
, pois ele possui uma melhor proporção para arquivos de texto.Comparação e exemplos:
ATUALIZAR como o @Jjoao me disse em um comentário, curiosamente,
xz
parece ter uma melhor proporção em arquivos simples com suas opções padrão:Para mais informações, aqui está uma referência interessante para diferentes ferramentas: http://binfalse.de/2011/04/04/comparison-of-compression/
Para o exemplo acima, eu uso
-9
a melhor taxa de compactação, mas se o tempo necessário para compactar os dados for mais importante que a taxa, é melhor não usá-los (use uma opção mais baixa, ou seja-1
, algo entre eles).fonte
xz myfile
?xz
, mas vou considerar agora. Veja a atualização do meu post.xz -9
. Aumenta bastante a memória necessária para compactação / descompactação, sem melhorar significativamente a taxa de compactação. A página de manual ainda diz (grifo deles) "Especificamente, não é uma boa ideia usar cegamente -9 para tudo como costuma ser com gzip (1) e bzip2 (1)". O padrãoxz -6
é bom o suficiente e atéxz -0
/xz -1
geralmente compacta melhor quegzip -9
.-9
, mas usei aqui, pois queria fazer algum tipo de referência para a taxa de compressão "na mesma escala". Mas, mais uma vez, você está totalmente certo: é uma má idéia usar cegamente-9
.Eu descobri uma solução de alcatrão sozinho.
Exclui um único arquivo depois de compactado no arquivo de destino.
A velocidade de compressão não é muito rápida, no entanto. O comando se parece com:
fonte
Em complemento ao @apaul, enfatizo que compactar arquivos individualmente
(substitua bzip2 por gzip, xz ou qualquer que seja o seu zip favorito) pode ser importante:
Dessa forma, você ainda pode ver (
bzcat file.bz2
), pesquisar (bzgrep file.bz2
), editar (vi file.bz2
) o arquivo compactado e remover os mais antigos quando necessário.fonte
Eu estava tentando fazer isso na versão BSD do tar. Nesse caso, a opção --remove-files não está disponível. O que acabei fazendo (e trabalhei) foi:
fonte