La comanda gzip comprimeix fitxers en el format gzip (extensió .gz), el més habitual a Linux. És ràpida, està instal·lada a totes les distribucions i és la que fan servir per defecte els logs rotats (dpkg.log.2.gz), les pàgines de manual i els arxius .tar.gz. Per defecte substitueix el fitxer original pel comprimit: informe.txt passa a ser informe.txt.gz.
Sintaxi
gzip [opcions] [fitxer...]
Sense fitxers (o amb -), comprimeix el que li arriba per l’entrada estàndard i ho escriu a la sortida estàndard. gzip comprimeix fitxers d’un en un: no agrupa diversos fitxers en un de sol ni comprimeix directoris. Per a això es combina amb tar (més avall).
Opcions més útils
| Opció | Què fa |
|---|---|
-k | Conserva el fitxer original (keep) |
-d | Descomprimeix (equival a gunzip) |
-c | Escriu el resultat a la sortida estàndard i no toca l’original |
-v | Mostra el percentatge de compressió de cada fitxer |
-l | Mostra la mida comprimida i original d’un .gz |
-t | Comprova que un .gz no estigui malmès |
-r | Recursiu: comprimeix tots els fitxers dins dels directoris indicats |
-1 … -9 | Nivell de compressió: -1 (o --fast) és el més ràpid; -9 (o --best), el que més comprimeix. Per defecte, -6 |
-f | Força: sobreescriu sense preguntar, comprimeix enllaços… |
-S .suf | Fa servir un altre sufix en lloc de .gz |
Exemples
Comprimir un fitxer (l’original desapareix):
$ ls -l informe.txt
-rw-rw-r-- 1 oscar oscar 1288895 Oct 4 16:02 informe.txt
$ gzip informe.txt
$ ls -l informe.txt.gz
-rw-rw-r-- 1 oscar oscar 428484 Oct 4 16:02 informe.txt.gz
gzip conserva els permisos i la data de modificació de l’original, i guarda el nom original dins del .gz.
Comprimir i conservar l’original:
gzip -k informe.txt
Veure quant ha comprimit:
$ gzip -v dades.txt
dades.txt: 66.8% -- replaced with dades.txt.gz
Comprimir tots els .txt del directori actual (cada un en el seu .gz):
gzip *.txt
Comprimir tots els fitxers d’un directori i dels seus subdirectoris. Fixa’t que el directori es manté i cada fitxer es comprimeix per separat:
$ gzip -rv logs
logs/app.log: 65.5% -- replaced with logs/app.log.gz
logs/vells/app.log.1: 65.5% -- replaced with logs/vells/app.log.1.gz
Sense -r, gzip no fa res amb un directori:
$ gzip logs
gzip: logs is a directory -- ignored
Comprimir al màxim:
gzip -9 informe.txt
Comprimir sense tocar l’original i triant el nom del resultat, amb -c:
gzip -c informe.txt > copia_informe.gz
Comprimir la sortida d’una altra comanda, per exemple una còpia d’una base de dades:
mysqldump botiga | gzip > botiga_$(date +%F).sql.gz
Veure informació d’un .gz
$ gzip -l informe.txt.gz
compressed uncompressed ratio uncompressed_name
428484 1288895 66.8% informe.txt
El format gzip guarda la mida original en només 32 bits, de manera que per a fitxers de més de 4 GiB la columna uncompressed no és correcta. En aquest cas, la mida real la dona zcat fitxer.gz | wc -c.
Comprovar que un fitxer no està malmès (no mostra res si tot és correcte):
gzip -t informe.txt.gz && echo correcte
Descomprimir
gzip -d informe.txt.gz
És el mateix que gunzip informe.txt.gz. Per llegir un .gz sense descomprimir-lo al disc hi ha unes quantes comandes que ja venen amb el paquet gzip:
zcat informe.txt.gz | head # mostra el contingut
zless /var/log/dpkg.log.2.gz # el pagina, com less
zgrep install /var/log/dpkg.log.2.gz # hi busca text, com grep
Comprimir directoris: tar + gzip
Com que gzip només treballa amb fitxers sols, per comprimir un directori sencer en un únic fitxer primer l’agrupes amb tar, que pot cridar gzip ell mateix amb -z:
tar -czvf projecte.tar.gz projecte/
I per extreure’l:
tar -xzvf projecte.tar.gz
Tens tots els detalls al post de tar.
Quin nivell triar
Amb un log d’accessos d’Apache de 6,2 MB en un Raspberry Pi 4:
| Comanda | Mida final | Temps |
|---|---|---|
gzip -1 | 1,1 MB | 0,17 s |
gzip -6 (per defecte) | 872 KB | 0,43 s |
gzip -9 | 820 KB | 1,05 s |
El -9 triga més del doble que el valor per defecte per guanyar només un 6 %. Normalment el valor per defecte és el millor equilibri. Si necessites comprimir més, val més la pena canviar de format (bzip2, xz o zstd) que pujar el nivell de gzip. I si el problema és la velocitat amb fitxers grans, pigz (paquet pigz) fa el mateix que gzip però aprofitant tots els nuclis del processador, i genera fitxers .gz normals.
Compte amb…
- L’original desapareix: si vols conservar-lo,
-ko-c. - Si el
.gzja existeix,gzippregunta abans de sobreescriure’l (o no ho fa i avisa ambalready exists; not overwrittensi no hi ha terminal, com en un script). Amb-fel sobreescriu sense preguntar. - Un fitxer que ja acaba en
.gzno es torna a comprimir:gzipresponalready has .gz suffix -- unchanged. - Comprimir fitxers ja comprimits no serveix de gaire: fotos JPEG, vídeos,
.zip… gairebé no es redueixen.