L'archivage consiste à rassembler plusieurs fichiers en une seule entité, appelée archive. L'outil tar (Tape Archive) réalise cette opération sans réduction de volume. Pour obtenir une archive compressée, il convient de combiner tar avec un algorithme de compression tel que gzip, bzip2 ou xz.
Lors de transferts réseau via scp avec de nombreux petits fichiers, une étape préalable de compression améliore sensiblement les performances globales, malgré le temps CPU consacré à l'opération.
Création d'archives non compressées
La syntaxe fondamentale pour générer une archive :
tar -cvf projet.tar repertoire/
Les options : c (créasion), v (mode verbeux), f (fichier de sortie). Les options c et f sont obligatoires, v étant facultative. Cette commande écrase silencieusement tout fichier existant portant le même nom.
Pour extraire le contenu :
tar -xf projet.tar
L'option x indique l'extraction (extract).
Illustration pratique
$ tree demo/
demo/
├── docs/
│ └── notes.md
├── app.py
├── LICENSE
├── lib/
│ └── helper.py
└── cache/
└── data.tmp
$ tar -cvf demo.tar demo/
demo/
demo/cache/
demo/cache/data.tmp
demo/docs/
demo/docs/notes.md
demo/lib/
demo/lib/helper.py
demo/app.py
demo/LICENSE
$ ls -lh demo.tar
-rw-r--r-- 1 user user 10K 12 juin 16:40 demo.tar
$ tar -cf demo.tar demo/ # sans sortie détaillée
Compression intégrée
Trois algorithmes principaux s'intègrent nativement avec tar :
tar -czf projet.tgz repertoire/ # gzip
tar -cjf projet.tbz2 repertoire/ # bzip2
tar -cJf projet.txz repertoire/ # xz
| Algorithme | Vitesce | Taux de compression | Extension | Cas d'usage |
|---|---|---|---|---|
| gzip | Rapide | Moyen | .gz / .tgz | Usage général, compatibilité maximale |
| bzip2 | Lente | Élevé | .bz2 / .tbz2 | Compromis vitesse/taux |
| xz | Très lente | Très élevé | .xz / .txz | Archivage long terme, espace critique |
Décompression : remplacer c par x et omettre le répertoire source.
tar -xzf projet.tgz
tar -xjf projet.tbz2
tar -xJf projet.txz
Alternative : format ZIP
Le format zip, omniprésent sous Windows, fonctionne indépendamment de tar :
zip -r projet.zip repertoire/ # compression récursive
unzip projet.zip # extraction vers répertoire courant
unzip projet.zip -d /chemin/cible # extraction vers destination spécifique
Comparaison empirique
Sur un jeu de données substantiel (32 Go, 78 569 fichiers répartis dans 38 répertoires) :
$ du -sh dataset/
32G dataset/
$ tar -czf dataset.tgz dataset/
$ tar -cjf dataset.tbz2 dataset/
$ tar -cJf dataset.txz dataset/
$ ls -lh dataset.*
-rw-rw-r-- 1 user user 5,9G 12 juin 18:31 dataset.tgz
-rw-rw-r-- 1 user user 5,2G 12 juin 18:54 dataset.tbz2
-rw-rw-r-- 1 user user 1,6G 12 juin 21:21 dataset.txz
$ zip -r dataset.zip dataset/ # pour comparaison
$ ls -lh dataset.zip
-rw-rw-r-- 1 user user 6,1G 12 juin 21:45 dataset.zip
Constat : xz divise par quatre le volume par rapport à gzip, au prix d'un temps de traitement considérablement plus long.