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?

zen
fonte
Duplicado: superuser.com/questions/378230
Hermann

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

apaul
fonte
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
zen
fonte
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.

JJoao
fonte
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 {} \;
pgilmon
fonte
By the way, a versão BSD é o que você ganha por padrão, se acontecer de você estar usando MacOS
pgilmon