Comando gzip in Linux: comprimere file e conservare l’originale

gzip comprime i dati di un file nel formato .gz. Per conservare anche il file originale usa -k, oppure scrivi il risultato in un file separato con -c: normalmente la compressione di un file lo sostituisce con la versione compressa.

gzip non riunisce automaticamente più file e directory in un archivio. Quando devi mantenere insieme nomi e struttura dei percorsi, usa prima un archiviatore come tar, che può anche applicare la compressione gzip.

Sintassi e preparazione

gzip [options] [file...]

Le parentesi indicano opzioni e file da sostituire con quelli reali. Controlla gzip --version e man gzip, perché disponibilità e dettagli delle opzioni dipendono dall’implementazione installata. Gli esempi seguenti si riferiscono a GNU gzip.

Prepara un file normale report.log leggibile e una directory dove puoi scrivere. Usa una copia di prova se il contenuto è importante e controlla che i nomi report.log.gz e report-copy.log.gz siano disponibili. Non usare come input un log che un’applicazione sta ancora modificando senza prima predisporre una copia coerente o la procedura di rotazione prevista.

La compressione è senza perdita di dati: dopo una decompressione riuscita devono tornare i byte iniziali. Non significa però che ogni file diventi molto più piccolo. Dati già compressi o file molto piccoli possono offrire poco risparmio, anche per il costo dell’intestazione del formato.

Comprimere conservando l’originale

Mantieni l’input con -k. Crea report.log.gz lasciando report.log al suo posto:

gzip -k report.log

Dopo l’operazione controlla la presenza di entrambi i file. Senza -k, la normale compressione di un file sostituisce l’input con il risultato .gz quando riesce. Se l’output esiste già, leggi l’avviso e verifica i nomi; non aggiungere automaticamente opzioni per forzare la sovrascrittura.

Scegli un altro nome con -c. L’opzione invia i dati compressi allo standard output; la shell li salva nel file a destra di >:

gzip -c report.log > report-copy.log.gz

In questo caso gzip mantiene l’input, ma la redirezione della shell può troncare un file di destinazione già esistente prima che gzip abbia completato il lavoro. Verifica quindi il nome di uscita prima di eseguire il comando e non farlo coincidere con l’input. Un file creato dalla redirezione, da solo, non prova che la compressione sia riuscita.

Controllare l’integrità del file compresso

Verifica lo stream gzip senza creare un file decompresso sul disco:

gzip -t report.log.gz

Normalmente un test riuscito non stampa testo. Controlla anche il codice di uscita subito dopo il comando, con echo $? in una shell POSIX, prima di eseguire altro: in GNU gzip 0 indica successo, 1 un errore e 2 un avviso da valutare. Se compaiono errori, conserva la sorgente e non considerare quella copia un ripristino valido.

Il formato comprende un controllo di ridondanza ciclica, o CRC (Cyclic Redundancy Check), per rilevare alterazioni dei dati. Un risultato valido di -t indica che lo stream supera i controlli del formato; non prova chi lo abbia creato, che sia la versione desiderata o che corrisponda a una sorgente esterna specifica. Per questi obiettivi servono un confronto con la fonte corretta e, quando necessario, una verifica dell’autenticità.

Per confrontare il contenuto puoi decomprimere verso lo standard output con gzip -dc report.log.gz e confrontarlo con la sorgente conservata, evitando di mandare dati binari direttamente al terminale. Se lo salvi, scegli un nuovo nome e applica le stesse precauzioni sulla redirezione.

Esempio minimo: verificare i due file

In una directory di prova dove note.txt e note.txt.gz non contengono dati da conservare, esegui:

printf 'hello\n' > note.txt
gzip -k note.txt
ls note.txt*

L’elenco deve contenere questi due nomi:

note.txt  note.txt.gz

Gli spazi e la disposizione su una o più righe dipendono dal terminale e dalle opzioni di ls. Il dato da verificare è la presenza dei due file. note.txt deve ancora contenere hello seguito da un ritorno a capo; gzip -t note.txt.gz controlla invece il file compresso.

In una prova locale del 3 novembre 2026 con GNU gzip 1.14 di Git for Windows, -k ha conservato la sorgente e -c ha creato un risultato con un nome diverso. La decompressione ha restituito gli stessi byte iniziali; l’esempio di note.txt ha mantenuto entrambi i file. Su file sacrificabili separati sono stati confermati sia la sostituzione dell’input senza -k, sia il rifiuto di una copia con CRC alterato. Il test riguarda questi dati su Windows, non proprietà o metadati di un sistema Linux né l’autenticità di un archivio ricevuto.

Opzioni principali

Opzione Funzione
-k Mantiene i file di input durante la compressione.
-c Scrive il risultato sullo standard output e mantiene l’input. Controlla la destinazione della redirezione.
-t Verifica l’integrità dei dati compressi senza salvarne la decompressione.
-1 ... -9 Sceglie il compromesso: -1 privilegia la velocità, -9 una compressione maggiore. Il risparmio effettivo dipende dai dati.
-v Mostra informazioni sull’elaborazione, tra cui la riduzione ottenuta.

Più file, spazio disponibile e riservatezza

Passare più nomi a gzip normalmente comprime ciascun file separatamente: non crea un archivio navigabile con la struttura delle directory. Anche una sequenza di membri gzip non sostituisce la gestione di file e percorsi di tar. Per una directory usa la combinazione adatta di tar e gzip e verifica poi l’estrazione.

Conservando input e output occorre spazio per entrambi. Controlla il risultato e gli errori prima di eliminare copie utili; se una prova fallisce, risolvi spazio o permessi e riparti da una sorgente valida. Non forzare la compressione di file importanti soltanto per eliminare un avviso.

La compressione non è cifratura: chi possiede il file gzip può normalmente decomprimerlo. Non affidarle la protezione di documenti riservati; usa il sistema di protezione previsto per quei dati.

Domande frequenti

Posso comprimere un’intera directory in un solo file con gzip?

gzip non è l’archiviatore che conserva la struttura di una directory. Puoi combinarlo con tar, per esempio con tar -czf backup.tar.gz directory/, dopo avere scelto sorgente e nome di uscita corretti.

Perché -t non stampa nulla?

Un controllo riuscito normalmente è silenzioso. Verifica il codice di uscita e gli eventuali messaggi di errore; l’assenza di testo non basta se non sai quale comando sia appena terminato.

Documentazione di riferimento

La specifica del formato gzip, RFC 1952 descrive struttura e controllo CRC. Per le opzioni consulta il manuale installato con man gzip; il manuale sorgente doc/gzip.texi è incluso anche nell’archivio sorgente ufficiale GNU gzip 1.15, scaricabile come tar.xz.