12.6. bzip2 et gzip : compression de données

Vous avez vu que nous avons déjà parlé de ces deux programmes quand nous avons évoqué tar. Contrairement à WinZip sous Windows, l'archivage et la compression sont faits en utilisant deux programmes séparés ( tar pour l'archivage, et les deux programmes que nous allons maintenant introduire pour la compression, bzip2 et gzip.

En premier lieu, bzip2 a été écrit en tant que remplacement pour gzip. Ses possibilités de compression sont en général meilleures, mais d'un autre côté il consomme plus de mémoire. La raison pour laquelle gzip est encore là est qu'il est encore beaucoup plus répandu que bzip2. Peut-être qu'un jour bzip2 remplacera complètement gzip, mais peut-être pas.

Les deux commandes ont une syntaxe similaire :

gzip [options] [fichier(s)]

Si aucun nom de fichier n'est donné, gzip comme bzip2 attendra des données sur l'entrée standard et enverra le résultat sur la sortie standard. Donc les deux programmes sont utilisables avec des tubes. Les deux commandes ont aussi un ensemble d'options similaires :

  1. -1, ..., -9 : Régler la capacité de compression. Plus le nombre est haut, plus la compression sera élevée, mais mieux signifie aussi plus lent : on n'a rien sans rien.

  2. -d : Décompresser un ou des fichier(s). C'est équivalent à utiliser gunzip ou bunzip2.

  3. -c : Envoyer le résultat de la compression/décompression des fichiers donnés en paramètre sur la sortie standard.

Attention! Par défaut, gzip et bzip2 effaceront le ou les fichier(s) qu'ils ont compressés (ou décompressés) si vous n'utilisez pas l'option -c. Vous pouvez l'éviter avec bzip2 en utilisant l'option -k, mais gzip n'a aucune option de la sorte!

Quelques exemples, maintenant. Supposons que vous vouliez compresser tous les fichiers se terminant par .txt dans le répertoire courant avec bzip2, vous utiliserez alors :

$ bzip2 -9 *.txt

Supposons que vous vouliez partager votre archive d'images avec quelqu'un, mais il ne dispose pas de bzip2, uniquement de gzip. Vous n'avez pas besoin de décompresser l'archive et de la recompresser, vous pouvez juste la décompresser sur la sortie standard, utiliser un tube, compresser depuis l'entrée standard et rediriger le résultat vers la nouvelle archive :

bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz

Et voilà le travail. Vous pourriez avoir tapé bzcat au lieu de bzip2 -dc. Il existe un équivalent pour gzip mais son nom est zcat, et non pas gzcat. Vous disposez aussi de bzless (resp. zless) si vous voulez directement visualiser des fichiers compressés sans avoir à les décompresser avant. Comme exercice, essayez de trouver la commande que vous auriez à taper pour voir des fichiers sans les décompresser, et sans utiliser bzless or zless :-)