Archivage et compression sous Linux avec tar et alternatives

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.

Étiquettes: tar gzip bzip2 xz zip

Publié le 30 août à 06h35