Le format tar est un outil d’archivage largement répandu dans les systèmes de type Unix et Linux.
Son nom, abréviation de « Tape ARchive », reflète son origine : la sauvegarde séquentielle de données sur des bandes magnétiques. On l’appelle aussi parfois « tarball ».
Par défaut, tar se contente de regrouper les fichiers sans compression. Cependant, il est possible d’appliquer différentes techniques de compression pour obtenir une archive plus compacte. Généralement inclus dans les distributions Linux, le format tar est aussi pris en charge par d’autres systèmes d’exploitation, comme Windows et macOS, grâce à divers outils et utilitaires.
Cet article explorera quelques exemples d’utilisation courants de la commande tar et de ses options.
Commençons sans plus tarder…
Création d’une archive tar
La syntaxe pour créer une archive simple, sans compression, est la suivante :
$ tar cvf <nom-fichier-tar> <fichiers-à-archiver>
Dans cette commande, l’option c
indique la création, v
active le mode verbeux (détails), et f
permet de spécifier le nom du fichier archive. L’extension standard pour un fichier tar est .tar
. On peut désigner les fichiers à archiver par des caractères génériques ou en listant leurs noms ou chemins complets.
Prenons l’exemple d’un répertoire contenant trois fichiers :
$ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Pour créer une archive tar contenant ces trois fichiers, on procède ainsi :
$ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $
Il est également possible d’archiver uniquement certains fichiers, en les spécifiant explicitement :
$ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $
Création d’une archive compressée (GZ)
tar ne se limite pas à l’archivage ; il peut aussi compresser les fichiers pour gagner de l’espace. Un format de compression courant est gunzip, généralement identifié par l’extension .gz
ajoutée à .tar
, ou .tgz
. L’option z
permet de spécifier l’utilisation de la compression gunzip. Voici un exemple :
$ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $
On constate une différence notable de taille entre les deux archives, même si elles contiennent les mêmes fichiers. Cela est dû à l’application de la compression avec l’option z
.
Création d’une archive compressée (BZ2)
tar prend en charge d’autres formats de compression, tel que bz2 ou bzip2, identifiable par l’extension .tar.bz2
ou parfois .tbz2
. La compression bz2 peut générer une archive plus petite, mais elle est plus gourmande en ressources CPU, ce qui peut rendre les opérations de compression/décompression plus lentes qu’avec le format gz.
Exemple :
$ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $
Décompression de tous les fichiers
L’extraction d’une archive tar (compressée ou non) se fait simplement en utilisant l’option x
. Les exemples suivants illustrent son usage :
$ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
La même méthode s’applique aux archives compressées gz :
$ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Et également aux archives compressées bz2 :
$ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Affichage du contenu d’une archive tar
Pour afficher la liste des fichiers contenus dans une archive tar, utilisez l’option t
, comme suit :
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $
Décompression de fichiers spécifiques
Il est possible d’extraire un seul fichier d’une archive tar, tar.gz ou tar.bz2, en spécifiant son nom :
$ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $
On peut également extraire plusieurs fichiers en les listant séparés par des espaces :
$ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Décompression à l’aide de caractères génériques
Pour extraire un ou plusieurs fichiers en utilisant un motif de nom avec des caractères génériques, utilisez l’option --wildcards
:
$ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $
Ajout de fichiers à une archive
Il est possible d’ajouter de nouveaux fichiers à une archive tar non compressée existante en utilisant l’option r
ou --append
, avec le nom des nouveaux fichiers ou un modèle générique. Cette opération n’est possible qu’avec les archives .tar
non compressées, et non avec les formats compressés tar.gz
ou tar.bz2
:
$ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $
La liste du contenu de archive.tar
montre bien l’ajout des deux nouveaux fichiers.
Suppression de fichiers d’une archive
La suppression de fichiers d’une archive tar est possible grâce à l’option --delete
. La comparaison de la liste avant et après la suppression montre bien l’effet de cette option :
$ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $
Comme pour l’ajout, cette fonctionnalité ne fonctionne qu’avec les archives non compressées.
Création avec vérification
Lors de la création d’une archive non compressée, l’option W
permet de vérifier le contenu de l’archive :
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $
Cette option ne peut pas être utilisée avec les options de compression. Cependant, il est toujours possible de compresser l’archive par la suite avec gzip ou d’autres outils.
Extraction dans un dossier spécifique
Pour extraire le contenu d’une archive tar dans un dossier particulier, au lieu du répertoire courant, utilisez l’option -C
suivie du chemin du dossier :
$ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $
Utilisation de l’option diff
L’option --diff
ou d
permet de comparer les fichiers d’une archive tar avec ceux du système de fichiers. L’exemple suivant montre le résultat de la commande une première fois, quand le fichier dans l’archive et à l’extérieur étaient identiques, puis une seconde fois après modification du fichier :
$ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $
Exclusion de fichiers
Il est parfois nécessaire d’exclure des fichiers lors de la création d’une archive. L’option --exclude
permet de réaliser cela :
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $
L’exemple ci-dessus montre qu’on peut utiliser l’option --exclude
plusieurs fois pour exclure plusieurs fichiers ou modèles. Sur les six fichiers du répertoire, seuls deux ont été inclus dans l’archive archive.at.gz
.
Affichage de la taille du contenu
Pour obtenir la taille des fichiers contenus dans une archive tar compressée, on utilise la commande suivante :
$ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $
De même pour une archive bz2 :
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $
Préservation des permissions
Par défaut, la commande tar conserve les permissions des fichiers et dossiers qu’elle archive. Cependant, on peut spécifier explicitement cette option avec l’option -p
ou --preserve-permissions
:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $
Conclusion 👨💻
tar est un utilitaire éprouvé des systèmes Unix/Linux, principalement utilisé pour l’archivage et la sauvegarde de données. Il a évolué au fil du temps pour offrir de nombreuses options. Il peut être utilisé pour des tâches simples ou complexes, à condition de connaître les fonctionnalités disponibles. Cet article a présenté quelques-unes des opérations de base réalisables avec la commande tar, illustrant son utilité pour les tâches quotidiennes d’administration système.
Pour plus d’informations, consultez la page de manuel (man tar
) ou utilisez les commandes tar --help
ou tar --usage
.