Comandi: gzip & gunzip

Comandi: gzip & gunzip

gzip è uno dei più antichi e diffusi programmi di compressione software. In breve la compressione è un processo che permette di ricodificare, usando un modello a parole di lunghezza variabile (quando posso, posto un articolo di spegazione più dettagliato), un file in modo che il file ricodificato occupi meno spazio in bytes del file originale. Il programma gzip ha 2 modalità di funzionamento: con file argomento o come filtro.

Usare gzip con un file come argomento

L'utilizzo con un file argomento è semplice, basta indicare come unico parametro un file e gzip si occuperà di comprimerlo, creando un nuovo file compresso con lo stesso nome dell'originale ed estensione .gz. Esempio:

$ ls -l
-rw-r--r--  1 maurizio maurizio 2932 ago 10 01:21 myfile.txt
$ gzip myfile.txt 
$ ls -l
-rw-r--r--  1 maurizio maurizio 1546 ago 10 01:21 myfile.txt.gz

Come vediamo il file myfile.txt è stato compresso nel file myfile.txt.gz che è lungo un po' più di metà del precedente: 1546 bytes contro 2932.

Usare gunzip per decomprimere un file .gz

Per ottenere di nuovo il file decompresso basta usare gunzip:

$ gunzip myfile.txt.gz 
$ ls -l
-rw-r--r-- 1 maurizio maurizio 2932 ago 10 01:21 myfile.txt 

Usare gzip e gunzip come filtri

La cosa veramente ottima di gzip è che, come abbiamo detto, si può usare come filtro e quindi possiamo usarlo ad esempio con una pipe per convertire al volo l'otput di un altro comando. Per saperne di più sulle pipe e la redirezione potete guardare questo post: Redirezione di input e output Ad esempio se volessi generare con du la lista di tutte le sottodirectory della mia home e comprimerla al volo con gzip:

$ du ~/ | gzip > tutti.txt.gz
$ ls -l
-rw-rw-r-- 1 maurizio maurizio 782220 ago 10 01:27 tutti.txt.gz

Anche gunzip si può utilizzare come filtro:

$ cat tutti.txt.gz | gunzip 
4   /home/maurizio/.cache/shutter/unsaved
8   /home/maurizio/.cache/shutter
4   /home/maurizio/.cache/.fr-ikfyBv
300 /home/maurizio/.cache/docky
60  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy feat. Kid Rock/Rhythm
64  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy feat. Kid Rock
60  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy/Blues
60  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy/Rhythm
272 /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy/Buddy's Baddest_ The Best Of Buddy Guy
396 /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy
[...]

In questo caso se avessi impartito solo cat tutti.txt.gz avrei visto soltanto dei caratteri senza senso (per me) del file compresso, ma grazie a | gunzip ho fatto in modo che il flusso compresso passasse in input a gunzip che lo decomprime e poi lo manda in standard output per la visualizzazione corretta,

Posso anche usare l'operatore > per creare un file decompresso:

$ cat tutti.txt.gz | gunzip > tutti.txt
$ ls -l
-rw-rw-r--  1 maurizio maurizio 10094656 ago 10 01:41 tutti.txt
-rw-rw-r--  1 maurizio maurizio   782220 ago 10 01:27 tutti.txt.gz

In questo caso il file originale tutti.txt.gz rimane e viene creata una versione decompressa del file tutti.txt.

Bonus command: zcat

Di solito c'è un modo più semplice per visualizzare un file ".gz", il comando zcat che in pratica equivale a cat + gunzio.

$ zcat tutti.txt.gz 
4   /home/maurizio/.cache/shutter/unsaved
8   /home/maurizio/.cache/shutter
4   /home/maurizio/.cache/.fr-ikfyBv
300 /home/maurizio/.cache/docky
60  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy feat. Kid Rock/Rhythm
64  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy feat. Kid Rock
60  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy/Blues
60  /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy/Rhythm
272 /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy/Buddy's Baddest_ The Best Of Buddy Guy
396 /home/maurizio/.cache/vlc/art/artistalbum/Buddy Guy
[...]

Il comando zcat ha anche un altro utilizzo molto interessante: può visualizzare informazioni riguardo ai file compressi tramite l'opzione -l:

$ zcat -l tutti.txt.gz 
         compressed        uncompressed  ratio uncompressed_name
             782220            10094656  92.3% tutti.txt

In questo caso apprendiamo ad esempio che il file compresso tutti.txt.gz lungo 782220 bytes, decompresso in tutti.txt occuperebbe 10094656 bytes, e quindi il suo rapporto di compressione è del 92.3%.

Currently there are no comments, so be the first!