Come comprimo i file sul posto?


20

Ho una macchina con il 90% di utilizzo del disco rigido. Voglio comprimere i suoi oltre 500 file di registro in un nuovo file più piccolo. Tuttavia, il disco rigido è troppo piccolo per conservare sia i file originali che quelli compressi.

Quindi quello che mi serve è comprimere tutti i file di registro in un singolo nuovo file uno per uno, eliminando ogni originale una volta compresso.

Come posso farlo in Linux?


Risposte:


18

gzipo bzip2comprimerà il file e rimuoverà automaticamente quello non compresso (questo è il loro comportamento predefinito).

Tuttavia, tieni presente che durante il processo di compressione, entrambi i file esistono.

Se si desidera comprimere i file di registro (ad esempio: file contenenti testo), è possibile preferire bzip2, poiché ha un rapporto migliore per i file di testo.

bzip2 -9 myfile       # will produce myfile.bz2

Confronto ed esempi:

$ 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

AGGIORNAMENTO come @Jjoao mi ha detto in un commento, interessante, xzsembra avere il miglior rapporto su file semplici con le sue opzioni predefinite:

$ xz -9 myfile

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

Per ulteriori informazioni, ecco un benchmark interessante per diversi strumenti: http://binfalse.de/2011/04/04/comparison-of-compression/

Per l'esempio sopra, utilizzo -9per un miglior rapporto di compressione, ma se il tempo necessario per comprimere i dati è più importante del rapporto, è meglio non utilizzarlo (utilizzare un'opzione inferiore, cioè -1o qualcosa tra).


2
+1; Solo curioso: potresti aggiungere un xz myfile?
JJoao,

2
@JJoao grazie! È interessante, non sono abituato a usarlo xz, ma lo prenderò in considerazione ora. Vedi l'aggiornamento del mio post.
apaul

3
Per favore, non farlo xz -9. Aumenta notevolmente la memoria richiesta per la compressione / decompressione, senza migliorare significativamente il rapporto di compressione. La manpage dice anche (enfatizza la loro) "Nello specifico, non è una buona idea usare ciecamente -9 per tutto ciò che accade spesso con gzip (1) e bzip2 (1)". L'impostazione predefinita xz -6è abbastanza buona e anche xz -0/ di xz -1solito comprime meglio di gzip -9.
user49740

@ user49740 hai ragione. Lo uso raramente -9, ma l'ho usato qui poiché volevo creare una sorta di benchmark per il rapporto di compressione "sulla stessa scala". Ma ancora una volta, hai perfettamente ragione: è una cattiva idea usare ciecamente -9.
apaul

15

Ho trovato una soluzione di catrame da solo.
Elimina il singolo file dopo averlo compresso nel file di destinazione.
Tuttavia, la velocità di compressione non è abbastanza elevata. Il comando ha il seguente aspetto:

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

1
Buon catrame. +1
Aaron Hall

1

A complemento di @apaul, sottolineo che comprimere i file singolarmente

 bzip2 *.log.*

(sostituisci bzip2 con gzip, xz o qualunque sia il tuo file zip preferito) può essere importante:

In questo modo puoi ancora vedere ( bzcat file.bz2), cercare ( bzgrep file.bz2), modificare ( vi file.bz2) il file compresso e rimuovere quelli più vecchi quando necessario.


1

Stavo provando a farlo sulla versione BSD di tar. In questo caso, l'opzione --remove-files non è disponibile. Quello che ho finito per fare (e lavorare) è stato:

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

A proposito, la versione BSD è quella che ottieni di default se ti capita di usare MacOS
pgilmon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.