Fitxers comprimits a Linux

La comanda bzip2 a Linux: comprimir fitxers .bz2



La comanda bzip2 comprimeix i descomprimeix fitxers en format .bz2 amb l’algorisme de Burrows-Wheeler. Comprimeix més que gzip, però és més lenta, sobretot en descomprimir. Durant anys va ser l’opció habitual per a fitxers .tar.bz2; avui, per a fitxers nous, xz o zstd acostumen a ser millor tria, però bzip2 continua instal·lat a tot arreu i et trobaràs molts fitxers .bz2.

Com gzip i xz, bzip2 comprimeix fitxers individuals. Per comprimir un directori, primer s’agrupa amb tar (tar -cjf).

Sintaxi

bzip2 [opcions] [fitxers...]

Per defecte, bzip2 substitueix cada fitxer per la seva versió comprimida: informe.txt passa a ser informe.txt.bz2 i l’original desapareix. Si vols conservar-lo, afegeix -k.

Opcions més útils

OpcióQuè fa
-dDescomprimeix (equival a bunzip2)
-kConserva el fitxer original
-cEscriu a la sortida estàndard i no toca l’original
-1 … -9Mida de bloc, de 100 KB a 900 KB. -9 és el valor per defecte
-tComprova la integritat sense descomprimir
-vMostra la ràtio de compressió de cada fitxer
-fSobreescriu fitxers de sortida existents
-sFa servir menys memòria en descomprimir (més lent); útil en equips amb molt poca RAM

Exemples

Comprimir un fitxer i veure quant s’ha reduït:

$ bzip2 -v informe.txt
  informe.txt:  4.330:1,  1.847 bits/byte, 76.91% saved, 108894 in, 25147 out.
$ ls informe*
informe.txt.bz2

4.330:1 vol dir que el fitxer original és 4,3 vegades més gran que el comprimit; 76.91% saved, que t’estalvies gairebé un 77 % d’espai.

Comprimir conservant l’original:

bzip2 -k informe.txt

Comprimir diversos fitxers. Cada un queda en el seu propi .bz2:

bzip2 gener.csv febrer.csv marc.csv

Descomprimir (són equivalents):

bzip2 -d informe.txt.bz2
bunzip2 informe.txt.bz2

Llegir o buscar dins d’un fitxer comprimit sense descomprimir-lo al disc:

bzcat registre.log.bz2 | tail -20
bzless registre.log.bz2
bzgrep "ERROR" registre.log.bz2

Comprovar que un fitxer no està malmès:

$ bzip2 -tv informe.txt.bz2
  informe.txt.bz2: ok

Comprimir la sortida d’una altra comanda:

journalctl --since today | bzip2 > registre_avui.txt.bz2

Comprimir un directori, a través de tar:

tar -cjf projecte.tar.bz2 projecte/

Nivells de compressió

A diferència de gzip o xz, els números de bzip2 no són «nivells» sinó la mida dels blocs en què divideix el fitxer: -1 fa blocs de 100 KB i -9, de 900 KB. Com més gran és el bloc, més comprimeix. Com que -9 ja és el valor per defecte, posar bzip2 -9 no fa res diferent de bzip2 sol. El que sí pots fer és baixar-lo per anar una mica més de pressa. En un Raspberry Pi 4, amb un .tar de 53 MB:

OpcióTempsMida final
-111 s14,2 MB
-9 (per defecte)17 s12,8 MB

Compte amb…

  • L’original s’esborra. Sense -k o -c, després de comprimir només queda el .bz2.
  • Output file … already exists. bzip2 no sobreescriu fitxers existents; fes servir -f si ho vols.
  • Només fa servir un nucli. bzip2 és d’un sol fil. Si comprimeixes fitxers grans sovint, els paquets lbzip2 o pbzip2 (als repositoris de Debian i Ubuntu) generen fitxers .bz2 compatibles fent servir tots els nuclis. O canvia a xz -T0 o zstd -T0.
  • Fitxers malmesos. Com que treballa per blocs independents, bzip2recover fitxer.bz2 pot extreure els blocs que encara estiguin bé d’un fitxer danyat.

Comandes relacionades