Comme je vous le disais en introduction, aussi étonnant que cela puisse paraître, les
gzip et
bzip2 ne permettent de compresser qu'un seul fichier à la fois. Comment faire alors si vous voulez compresser une dizaine de fichiers ?
Sous Linux, on a depuis longtemps pris l'habitude de procéder en deux étapes :
- réunir les fichiers dans un seul gros fichier appelé archive. On utilise pour cela le programme tar ;
- compresser le gros fichier ainsi obtenu à l'aide de gzip ou de bzip2.
Ces deux étapes sont résumées dans le schéma de la figure suivante.
Nous allons dans un premier temps apprendre à manipuler
tar, puis nous verrons la compression avec
gzip et
bzip2, sans oublier les formats
zip et
rar que vos amis utilisant Windows risquent de vous envoyer un jour ou l'autre.
Les formats zip et rar ne séparent pas les étapes comme sur le schéma suivant. Ils sont capables d'assembler plusieurs fichiers en une archive et de la compresser en même temps.
Comme vous le voyez, sous Linux il y a donc une méthode à suivre dans un ordre précis. Voyons ensemble comment faire !
Regrouper d'abord les fichiers dans un même dossier
Vous avez plusieurs fichiers que vous souhaitez compresser. Dans mon cas, ce sont des fichiers
.tuto (qui contiennent des chapitres de tutoriels du Site du Zéro), mais vous pouvez bien entendu compresser ce que vous voulez : des textes, présentations, tableurs,
logs, etc.
Certains formats de fichier sont déjà compressés. C'est le cas des images jpeg, png et gif, mais aussi de la plupart des vidéos. Vous pouvez bien entendu les assembler dans une archive tar et même les compresser, mais vous ne les rendrez en général pas plus petits car ils ont déjà été compressés.
Mes fichiers
.tuto que je souhaite archiver sont pour le moment placés en vrac dans mon home :
Code : Console | $ ls
Bureau Images l-heritage.tuto Public
Documents la-surcharge-d-operateurs.tuto Modèles Vidéos
Examples les-principaux-widgets.tuto Musique |
Il est recommandé de placer d'abord les fichiers à archiver dans un seul et même dossier. Créons-le et déplaçons-y tous nos
.tuto :
Code : Console | $ mkdir tutoriels
$ mv *.tuto tutoriels/
$ ls
Bureau Examples Modèles Public Vidéos
Documents Images Musique tutoriels |
Voilà, nos fichiers sont réunis dans le dossier
tutoriels.
-cvf : créer une archive tar
Nous allons maintenant créer une archive
tar de ce dossier et de ses fichiers. La procédure à suivre pour créer une archive est :
Code : Console | tar -cvf nom_archive.tar nom_dossier/ |
J'utilise trois options :
- -c : signifie créer une archive tar ;
- -v : signifie afficher le détail des opérations ;
- -f : signifie assembler l'archive dans un fichier.
Essayons de faire cela sur notre dossier
tutoriels :
Code : Console | $ tar -cvf tutoriels.tar tutoriels/
tutoriels/
tutoriels/les-principaux-widgets.tuto
tutoriels/la-surcharge-d-operateurs.tuto
tutoriels/l-heritage.tuto |
Ici on archive le dossier
tutoriels et donc son contenu. Grâce à
-v, on voit bien la liste des fichiers qui ont été archivés.
Est-on obligé de mettre systématiquement nos fichiers dans un même dossier pour archiver ensuite ce dossier ? On ne pourrait pas archiver directement les fichiers ?
Si, c'est possible. Imaginons que nous soyons toujours dans notre home avec nos fichiers
.tuto. On pourrait très bien faire :
Code : Console | tar -cvf archive.tar fichier1 fichier2 fichier3 |
C'est possible et ça fonctionne. Toutefois, il est de coutume sous Linux de placer
d'abord les fichiers dans un dossier avant de les mettre dans le
tar. Cela permet d'éviter, lorsqu'on extrait les fichiers de l'archive, que ceux-ci aillent se mêler à d'autres fichiers. Nous allons voir ce problème maintenant.
-tf : afficher le contenu de l'archive sans l'extraire
Vous venez de recevoir une archive
tar qu'on vous a envoyée. Bien. Mais que contient-elle ?
Avant d'extraire quoi que ce soit, vous aimeriez peut-être voir son contenu. C'est possible avec
-tf :
Code : Console | $ tar -tf tutoriels.tar
tutoriels/
tutoriels/les-principaux-widgets.tuto
tutoriels/la-surcharge-d-operateurs.tuto
tutoriels/l-heritage.tuto |
Quand on fait cela, on voit que tous les fichiers sont réunis dans un même dossier
tutoriels, et ça c'est très pratique.
J'en reviens justement au problème dont je parlais un peu plus haut : imaginez que vous « détariez » une archive contenant plus de 400 fichiers dans votre home. Si ces fichiers n'étaient pas réunis dans un dossier, ils iraient tous se mêler aux autres fichiers du home, et alors là, je vous dis pas la pagaille !
Voilà donc pourquoi je vous ai invités dès le début à réunir vos fichiers à archiver dans un même dossier. Cela permet d'éviter de mauvaises surprises à celui qui extrait les fichiers de l'archive. Quasiment toutes les archives que l'on vous proposera de télécharger suivent ce même schéma et font attention à tout réunir dans un même dossier, mais vérifiez le contenu avant de l'extraire, on ne sait jamais !
-rvf : ajouter un fichier
Si vous avez oublié un fichier, vous pouvez toujours l'ajouter par la suite avec
-rvf :
Code : Console | $ tar -rvf tutoriels.tar fichier_supplementaire.tuto
tutoriels/fichier_supplementaire.tuto |
-xvf : extraire les fichiers de l'archive
Pour extraire les fichiers, on va utiliser les options
-xvf (
-x pour
eXtract) :
Code : Console | $ tar -xvf tutoriels.tar
tutoriels/
tutoriels/les-principaux-widgets.tuto
tutoriels/la-surcharge-d-operateurs.tuto
tutoriels/l-heritage.tuto |
Les fichiers s'extraient dans le répertoire dans lequel vous vous trouvez. Vérifiez donc avant de les extraire que ceux-ci sont réunis dans un même dossier (avec
-tf) si vous ne voulez pas que ces fichiers aillent se mélanger à d'autres !