Linux / Commande bzip2 : compresser un fichier et garder l’original

bzip2 compresse chaque fichier en un fichier .bz2 ; par défaut, il remplace normalement l’original après réussite. Utilisez -k pour garder la source ou -c pour enregistrer le flux sous un autre nom. bzip2 ne rassemble pas une arborescence : pour un fichier .tar.bz2, tar réalise l’archivage avant la compression.

Préparer un fichier et conserver l’original

Les exemples utilisent le programme bzip2. Consultez bzip2 --version et man bzip2 pour l’installation locale. Sa syntaxe générale accepte plusieurs fichiers :

bzip2 [OPTIONS] [FICHIER ...]

Dans Bash, commencez par un nouveau dossier de travail pour éviter les collisions. Continuez dans le même terminal uniquement si la préparation réussit :

demo=$(mktemp -d) &&
cd "$demo" &&
printf 'name,value\nalpha,10\nbeta,20\n' > data.csv &&
printf 'Repertoire de travail : %s\n' "$demo"

Le chemin affiché identifie votre essai. Pour créer data.csv.bz2 et garder data.csv :

bzip2 -k data.csv && ls -l data.csv data.csv.bz2

La liste doit montrer les deux noms. Sans -k, la commande sur un fichier nommé remplace normalement la source ; ce comportement ne doit pas être confondu avec une sauvegarde supplémentaire. Sur un fichier aussi court, la version compressée peut être plus grosse que l’original.

Choisir la sortie et vérifier les octets restaurés

bzip2 -c data.csv > data-copy.csv.bz2

-c envoie les données compressées vers la sortie standard en conservant la source. La redirection choisit un nouveau nom dans cet essai. Le shell peut toutefois vider un fichier de sortie existant avant l’exécution du programme ; n’utilisez jamais la source comme destination et ne supposez pas que le refus d’écrasement de bzip2 protège une redirection.

Contrôlez ensuite la copie compressée et restaurez vers un nom encore libre :

bzip2 -t data-copy.csv.bz2 &&
bzip2 -dc data-copy.csv.bz2 > restored-data.csv &&
cmp data.csv restored-data.csv &&
printf 'Contenu identique\n'

-t vérifie l’intégrité en décompressant les données sans écrire le résultat. -d choisit la décompression et -c conserve le fichier compressé tout en envoyant le contenu vers la sortie standard. cmp est normalement silencieux et renvoie 0 si les octets sont identiques ; le message final est donc conditionné à la réussite de toute la chaîne.

Le résultat attendu est ce contenu, avec un saut de ligne après chaque ligne :

name,value
alpha,10
beta,20

Un fichier de sortie partiel peut rester si une commande échoue. Lisez les diagnostics et ne le prenez pas pour une restauration terminée. Un test d’intégrité réussi détecte des erreurs de flux, mais ne certifie ni l’identité de l’expéditeur ni la version du document ; la comparaison avec une référence fiable reste une vérification distincte.

Comprendre les options de bloc et la mémoire

Option Rôle
-k Garder les fichiers d’entrée.
-c Écrire le résultat sur la sortie standard.
-d Décompresser.
-t Tester le flux sans créer de fichier restauré.
-1 à -9 Choisir des blocs de 100 000 à 900 000 octets lors de la compression.
-v Afficher des détails de traitement.
-s Réduire les besoins en mémoire, avec des compromis de traitement.

Avec bzip2, les chiffres sélectionnent une taille de bloc, pas exactement le même réglage que les niveaux de gzip. Le défaut est -9. Un bloc plus grand peut améliorer la compression et augmente les besoins en mémoire ; -1 ne doit pas être présenté comme une garantie de vitesse nettement supérieure.

bzip2 -1c data.csv > data-small-block.csv.bz2
bzip2 -9c data.csv > data-large-block.csv.bz2

Ces sorties sont de nouveaux noms dans l’essai. Une comparaison de taille sur ce petit CSV n’est pas une mesure générale de performance. Pour décompresser, il n’est pas nécessaire de rappeler -1 ou -9 : la taille de bloc est enregistrée dans le flux. Les contraintes de mémoire de la machine destinataire peuvent donc compter dès le choix de compression.

Le manuel officiel bzip2, notamment les options et la gestion de mémoire détaille ces réglages. Il distingue également les codes de sortie : 0 pour une fin normale, 1 pour un problème d’environnement ou d’entrée-sortie, 2 pour des données compressées corrompues et 3 pour une erreur interne.

Éviter les écrasements et choisir tar pour une arborescence

bzip2 refuse normalement de remplacer un fichier de sortie existant ; -f peut autoriser cet écrasement et modifier le traitement des liens ou de données non reconnues. Examinez la destination au lieu d’ajouter cette option pour faire taire une erreur. La compression n’est pas un chiffrement et ne remplace pas une copie de sauvegarde indépendante.

Plusieurs arguments produisent normalement plusieurs fichiers .bz2. Avec -c, leurs flux sont écrits à la suite ; cela ne constitue pas une archive permettant de récupérer chaque chemin séparément. Pour réunir un dossier dans un seul paquet, utilisez tar -cjf avec des noms et une destination adaptés. Le guide tar et ses formats compressés montre comment créer, lister puis restaurer une archive .tar.bz2 sans confondre compression et archivage.