Como compactar arquivos no local?


20

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:


18

gzipou bzip2comprimirá 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.

bzip2 -9 myfile       # will produce myfile.bz2

Comparação e exemplos:

$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile

$ bzip2 -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2

$ bunzip2 myfile.bz2

$ gzip -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz

ATUALIZAR como o @Jjoao me disse em um comentário, curiosamente, xzparece ter uma melhor proporção em arquivos simples com suas opções padrão:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz

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 -9a 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).


2
+1; Apenas curioso: você poderia adicionar um xz myfile?
JJoao

2
@JJoao thanks! É interessante, eu não estou acostumado a usar xz, mas vou considerar agora. Veja a atualização do meu post.
Apaul

3
Por favor não faça 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ão xz -6é bom o suficiente e até xz -0/ xz -1geralmente compacta melhor que gzip -9.
usar o seguinte comando

@ user49740 você está certo. Eu raramente uso -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.
apaul

15

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:

tar -zcvf my_log.tar.gz *.log --remove-files

11
Bom e velho alcatrão. 1
Aaron Hall

1

Em complemento ao @apaul, enfatizo que compactar arquivos individualmente

 bzip2 *.log.*

(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.


1

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:

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;

By the way, a versão BSD é o que você ganha por padrão, se acontecer de você estar usando MacOS
pgilmon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.