Archives tar

De La Mouche VII


tar est le programme d'archivage par excellence sous UNIX, aux côtés de cpio. Son utilisation n'est pas très intuitive au premier abord, mais on s'y fait vite.

Principe

Sur la ligne de commande, le nom du programme tar doit être suivi d'une chaîne de caractères représentant chacun une directive. On omet le tiret généralement placé avant les options des programmes.

L'un de ces caractères correspond à l'action principale entreprise (généralement visualiser, extraire ou créer). Il ne peut y avoir qu'un seul de ces caractères, sans cela tar ne comprendra pas l'action à entreprendre (logique).

Les autres caractères sont des options supplémentaires.

Visualiser le contenu d'une archive

Par exemple, pour afficher la liste des fichiers contenus dans une archive, il faut taper :

$ tar tvf archive.tar
  • t : visualiser (je cherche toujours pourquoi t)
  • v : mode verbeux (facultatif, permet d'obtenir plus d'informations sur les fichiers présents)
  • f : traiter le fichier dont le nom suit (tar est prévu à l'origine pour les lecteurs de bandes magnétiques)

Extraire une archive

Pour décompresser les fichiers contenus dans une archive, il faut taper :

$ tar xvf archive.tar

L'argument x (pour "eXtraire") a ici remplacé t ; les autres ont naturellement la même signification. Si on omet l'argument v, aucun message n'apparaîtra pour confirmer l'extraction de l'archive.

Par défaut, l'arborescence est recréée telle qu'elle figure dans l'archive.

Créer une archive

Pour créer une archive de fichiers, la syntaxe est la suivante :

$ tar cvf archive.tar fichier1 [ fichier2 [ ... ] ]

On a maintenant l'argument c (pour créer). Comme pour l'extraction, si on omet v, la création de l'archive se fera silencieusement.

Il faut impérativement placer le nom de l'archive à créer avant les fichiers à mettre dedans. Les fichiers peuvent bien sûr être des répertoires. Par défaut l'arborescence est conservée dans l'archive.

Exemple : pour créer une archive ab.tar contenant les fichiers a.txt et b.txt, il faut taper :

$ tar cvf ab.tar a.txt b.txt

Pour compresser le dossier sauvegardes dans une archive sauvegardes.tar :

$ tar cvf sauvegardes.tar sauvegardes

Archives compressées

tar est capable de traiter des archives compressées, entre autres dans les formats gzip (extension.tar.gz, plus rarement .tgz), bzip2 (extension .tar.bz2), et plus récemment xz (extension .tar.xz).

Pour traiter de tels fichiers, tar dispose des options z (gzip), j (bzip2) et J (xz).

Visualisation :

$ tar tvfz archive_gzipée.tar.gz
$ tar tvfj archive_bzipée.tar.bz2

Extraction :

$ tar xvfz archive_gzipée.tar.gz
$ tar xvfj archive_bzipée.tar.bz2

Création :

$ tar cvfz archive_gzipée.tar.gz répertoire_à_compresser
$ tar cvfj archive_bzipée.tar.bz2 répertoire_à_compresser

À noter que l'option de compression n'est plus nécessaire depuis longtemps pour la visualisation et l'extraction, on peut tout simplement appeler tar tvf ou tar xvf sur une archive compressée d'un format reconnu, et tar détectera le format de lui-même.

Entrée et sortie standard

On peut travailler sur l'entrée ou la sortie standard en utilisant un tiret (-) en tant que nom de fichier.

L'exemple permet de copier des fichiers d'une partition à l'autre en conservant les propriétés des fichiers, sans créer d'archive intermédiaire (à noter que l'utilitaire cpio est plus indiqué pour ça). Copier le répertoire /media/backup/mon_backup dans /home :

# tar -C /media/backup -cf - mon_backup | tar -C /home -xf -

Notez l'option -C qui permet d'exécuter tar depuis le répertoire spécifié en paramètre. Notez aussi le tiret devant les options de compression, nécessaire dans ce cas.

Outils auxiliaires

Je recommande vivement l'utilisation des outils du paquet atool, qui permettent de travailler de manière unifiée avec presque tous les formats d'archive existants, y compris donc les archives tar et leurs variantes compressées. J'utilise notamment als, qui liste le contenu d'une archive, et aunpack, qui permet de l'extraire dans un sous-répertoire, sans risque donc de polluer le répertoire courant.

(J'avais écrit mon propre utilitaire de visualisation et extraction d'archive, lz.sh qui fournit les commandes lz et uz à la manière de mtools, mais il faut avouer que les outils de atool sont plus puissants, et disponibles dans la plupart des distributions.)