A tutorial on 'tar'/fr
Page enfant de Archivage et compression de fichiers
Archiver des fichiers et des répertoires¶
La commande tar est l'utilitaire d'archivage principal sous Linux et autres systèmes de type Unix. Cette commande rassemble plusieurs fichiers ou répertoires et génère un fichier archive (aussi nommé fichier tar ou tarball). Par convention, un fichier archive possède le suffixe .tar. Le fichier archive d'un répertoire contient par défaut tous les fichiers et sous-répertoires avec leurs sous-répertoires, sous-sous-répertoires, et ainsi de suite. Par exemple, la commande tar --create --file project1.tar project1 rassemble le contenu du répertoire project1 dans le fichier project1.tar; le fichier d'origine est conservé, ce qui peut doubler l'espace disque utilisé.
Pour extraire des fichiers du fichier archive, utilisez la commande avec une option différente, soit tar --extract --file project1.tar. S'il n'existe pas de répertoire portant le nom d'origine, il sera créé. S'il existe un répertoire portant le nom d'origine et qu'il contient des fichiers du même nom que ceux du fichier archive, ces derniers seront remplacés. Il existe aussi une option pour spécifier le répertoire de destination pour le contenu extrait du fichier archive.
Compression et décompression¶
L'utilitaire tar peut compresser un fichier archive en même temps que ce fichier est créé. Parmi les méthodes de compression, nous recommandons xz ou gzip qui s'utilisent comme suit :
[user_name@localhost]$ tar --create --xz --file project1.tar.xz project1
[user_name@localhost]$ tar --extract --xz --file project1.tar.xz
[user_name@localhost]$ tar --create --gzip --file project1.tar.gz project1
[user_name@localhost]$ tar --extract --gzip --file project1.tar.gz
De façon générale, --xz produit un fichier compressé plus petit (c'est-à-dire avec un meilleur taux de compression), mais utilise plus de mémoire vive (RAM) (voir ce lien).
--gzip ne compresse pas autant, mais vous pouvez l'utiliser si vous avez des problèmes de manque de mémoire ou de durée d'exécution avec tar --create.
Vous pouvez aussi exécuter tar --create d'abord sans compression et utiliser ensuite la commande xz ou gzip dans une étape distincte, mais il est rarement utile de procéder ainsi. De même, vous pouvez exécuter xz -d ou gzip -d pour décompresser un fichier archive avant d'exécuter tar --extract, mais ceci est aussi rarement utile.
Une fois que le fichier tar est créé, il est aussi possible d'utiliser gzip ou bzip2 pour compresser l'archive et diminuer sa taille :
Ces commandes produisent les fichiers project1.tar.gz et project1.tar.bz2.
Options fréquemment employées¶
Il y a deux formes pour chaque option.
-cou--createpour créer une nouvelle archive-fou--file=précède le nom du fichier archive-xou--extractpour extraire des fichiers d'une archive-tou--listpour lister le contenu d'un fichier archive-Jou--xzpour compresser ou décompresser avecxz-zou--gzippour compresser ou décompresser avecgzip
Les options de la forme simple peuvent être combinées en les faisant précéder d'un seul tiret; par exemple tar -cJf project1.tar.xz project1 équivaut à tar --create --xz --file=project1.tar.xz project1.
Plusieurs autres options sont disponibles, selon la version que vous utilisez. Pour obtenir la liste de toutes les options dont vous disposez, exécutez man tar ou tar --help. Notez que certaines versions moins récentes peuvent ne pas prendre en charge la compression avec --xz.
Exemples¶
Dans les exemples qui suivent, nous supposons un répertoire qui contient les sous-répertoires et fichiers (bin/, documents/, jobs/, new.log.dat, programs/, report/, results/, tests/, work/). Comparez ces exemples avec le contenu de votre propre répertoire.
Archivage¶
Répertoires particuliers¶
On utilise tar le plus fréquemment pour créer une archive d'un répertoire. Dans cet exemple, nous créons le fichier archive results.tar avec le répertoire results.
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ results/ tests/ work/
[user_name@localhost]$ tar -cvf results.tar results
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
Avec la commande ls, nous voyons le nouveau fichier tar :
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ results/ results.tar tests/ work/
Nous avons utilisé la commande tar avec les options -c (pour create), -v (pour verbosity) et -f (pour file). Nous avons nommé l'archive results.tar; le nom pourrait être différent, mais il est préférable qu'il soit semblable à celui du répertoire pour que vous puissiez plus facilement le reconnaître.
Vous pouvez placer plusieurs répertoires ou fichiers dans un fichier tar; par exemple, pour placer les répertoires results, report et documents dans le fichier archive full_results.tar, nous utilisons :
[user_name@localhost]$ tar -cvf full_results.tar results report documents/
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
report/
report/report-2016.pdf
report/report-a.pdf
documents/
documents/1504.pdf
documents/ff.doc
L'option v permet d'afficher les fichiers qui ont été ajoutés; pour les masquer, omettez cette option.
Pour vérifier l'archive créée, utilisez ls :
[user_name@localhost]$ ls
bin/ documents/ full_results.tar jobs/ new.log.dat programs/ report/ results/ results.tar tests/ work/
Fichiers et répertoires dont le nom commence par une lettre en particulier¶
Dans notre répertoire de travail se trouvent deux répertoires qui commencent par la lettre r (reports et results). Dans cet exemple, nous rassemblons le contenu de ces répertoires dans une seule archive (archive.tar).
[user_name@localhost]$ tar -cvf archive.tar r*
report/
report/report-2016.pdf
report/report-a.pdf
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
Ici nous avons rassemblé tous les répertoires qui commencent par la lettre r. Il est aussi possible de rassembler des fichiers ou des répertoires avec une chaîne de caractères, par exemple *r*, *.dat, etc.
Ajouter (append) des fichiers à la fin d'une archive¶
L'option -r est utilisée pour ajouter des fichiers à une archive existante sans avoir à en créer une nouvelle ou à décompresser l'archive puis exécuter tar à nouveau pour créer une nouvelle archive. Dans le prochain exemple, nous ajoutons le fichier new.log.dat à l'archive results.tar.
La commande tar a ajouté le fichier new.log.dat à la fin de l'archive results.tar.
Pour vérifier, utilisez les options précédentes pour lister les fichiers du fichier tar :
[user_name@localhost]$ tar -tvf results.tar
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-16 19:36 results/Res-01/
-rw-r--r-- name name 11672 2016-11-16 15:10 results/Res-01/log.15Feb16.1
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
-rw-r--r-- name name 10905 2016-11-20 11:16 new.log.dat
Note
Il n'est pas possible d'ajouter des fichiers à une archive compressée (.gz ou .bz2). Les fichiers peuvent être ajoutés uniquement à une archive tar ordinaire. L'option -r est aussi utilisée avec la commande tar pour ajouter un ou plusieurs répertoires à un fichier tar existant.
Nous allons maintenant ajouter le répertoire report à l'archive results.tar de l'exemple précédent :
Voyons maintenant le fichier tar créé :
[user_name@localhost]$ tar -tvf results.tar
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-16 19:36 results/Res-01/
-rw-r--r-- name name 11672 2016-11-16 15:10 results/Res-01/log.15Feb16.1
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
-rw-r--r-- name name 10905 2016-11-20 11:16 new.log.dat
drwxrwxr-x name name 0 2016-11-20 11:02 report/
-rw-r--r-- name name 924729 2015-11-20 04:14 report/report-2016.pdf
-rw-r--r-- name name 924729 2015-11-20 04:14 report/report-a.pdf
Rappelez-vous que l'option -v n'est pas nécessaire si vous n'avez pas besoin d'afficher les détails des fichiers.
Combiner deux archives¶
Comme on peut ajouter un fichier à une archive, on peut aussi ajouter une archive à une autre archive avec l'option -A. Ajoutons l'archive report.tar (pour le rapport du répertoire) à l'archive results.tar existante :
Pour vérifier l'archive existante :
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ report.tar results/ results.tar tests/ work/
[user_name@localhost]$ tar -tvf results.tar
drwxr-xr-x name name 0 2016-11-20 16:16 results/
-rw-r--r-- name name 10905 2016-11-20 16:16 results/log1.dat
drwxr-xr-x name name 0 2016-11-20 16:16 results/Res-01/
-rw-r--r-- name name 11682 2016-11-20 16:16 results/Res-01/log.15Feb16.4
drwxr-xr-x name name 0 2016-11-20 16:16 results/Res-02/
-rw-r--r-- name name 34117 2016-11-20 16:16 results/Res-02/log.15Feb16.balance.b.4
Ajoutons maintenant l'archive et vérifions la nouvelle archive :
[user_name@localhost]$ tar -A -f results.tar report.tar
[user_name@localhost]$ tar -tvf results.tar
drwxr-xr-x name name 0 2016-11-20 16:16 results/
-rw-r--r-- name name 10905 2016-11-20 16:16 results/log1.dat
drwxr-xr-x name name 0 2016-11-20 16:16 results/Res-01/
-rw-r--r-- name name 11682 2016-11-20 16:16 results/Res-01/log.15Feb16.4
drwxr-xr-x name name 0 2016-11-20 16:16 results/Res-02/
-rw-r--r-- name name 34117 2016-11-20 16:16 results/Res-02/log.15Feb16.balance.b.4
drwxrwxr-x name name 0 2016-11-20 11:02 report/
-rw-r--r-- name name 924729 2015-11-20 04:14 report/report-2016.pdf
-rw-r--r-- name name 924729 2015-11-20 04:14 report/report-a.pdf
Dans l'exemple précédent, nous avons utilisé l'option -A (pour Append) dans tar -A -f results.tar report.tar pour ajouter l'archive report.tar à l'archive results.tar comme vous pouvez le constater en comparant le résultat de la commande tar -tvf results.tar avant et après l'opération.
Note
Les options -A, --catenate et --concatenate sont équivalentes; selon le système que vous utilisez, certaines options pourraient ne pas être disponibles. La commande précédente peut aussi être utilisée comme suit :
Note
Il existe deux possibilités pour ajouter l'archive archive_2.tar à l'archive archive_1.tar. La première est d'utiliser -r comme nous l'avons vu précédemment quand on ajoute un fichier à une archive existante. Dans ce cas, l'archive ajoutée archive_2.tar apparaîtra comme un fichier ajouté à une archive existante. L'option -tvf montrera que l'archive sera ajoutée comme un fichier à la fin de l'archive. La deuxième possibilité est d'utiliser l'option -A. Dans ce cas, l'archive ajoutée n'apparaîtra pas comme une archive; la commande créera une nouvelle archive.
Exclure certains fichiers¶
À partir de l'exemple précédent, créons l'archive results.tar pour y enregistrer les résultats, mais en y ajoutant l'option --exclude=*.dat pour exclure les fichiers avec le suffixe .dat.
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ results/ tests/ work/
[user_name@localhost]$ ls results/
log1.dat log5.dat Res-01/ Res-02/
[user_name@localhost]$ tar -cvf results.tar --exclude=*.dat results/
results/
results/Res-01/
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ tar -tvf results.tar
drwxr-xr-x name name 0 2016-11-20 16:16 results/
drwxr-xr-x name name 0 2016-11-20 16:16 results/Res-01/
-rw-r--r-- name name 11682 2016-11-20 16:16 results/Res-01/log.15Feb16.4
drwxr-xr-x name name 0 2016-11-20 16:16 results/Res-02/
-rw-r--r-- name name 34117 2016-11-20 16:16 results/Res-02/log.15Feb16.balance.b.4
Conserver les liens symboliques¶
Si vous avez des liens symboliques dans votre répertoire et que vous voulez les préserver, ajoutez l'option -h à la commande tar.
Compression¶
Compresser un fichier, des fichiers, un fichier archive tar¶
La compression et l'archivage sont deux processus différents. L'archivage ou la création d'un fichier tar rassemble plusieurs fichiers ou répertoires dans un même fichier. Le processus de compression s'effectue sur un seul fichier ou une seule archive pour en diminuer la taille, avec des utilitaires comme gzip ou bzip2. Dans l'exemple suivant, nous compressons new.log.dat et results.tar.
-
Avec
gzip:[user_name@localhost]$ ls bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar tests/ work/ [user_name@localhost]$ gzip new.log.dat [user_name@localhost]$ gzip results.tar [user_name@localhost]$ ls bin/ documents/ jobs/ new.log.dat.gz new_results/ programs/ report/ results/ results.tar.gz tests/ work/ -
Avec
bzip2:[user_name@localhost]$ ls bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar tests/ work/ [user_name@localhost]$ bzip2 new.log.dat [user_name@localhost]$ bzip2 results.tar [user_name@localhost]$ ls bin/ documents/ jobs/ new.log.dat.bz2 new_results/ programs/ report/ results/ results.tar.bz2 tests/ work/
Note
Pour compresser en même temps que l'archive est créée, utilisez les options z ou j pour gzip ou bzip2 respectivement. L'extension du nom du fichier n'a pas vraiment d'importance. Pour les fichiers compressés avec gzip, *.tar.gz et *.tgz sont des extensions communes; pour les fichiers compressés avec bzip2, *.tar.bz2 et *.tbz sont des extensions communes.
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ results/ tests/ work/
[user_name@localhost]$ tar -cvzf results.tar.gz results/
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ results/ results.tar.gz tests/ work/
[user_name@localhost]$ tar -cvjf results.tar.bz2 results/
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat programs/ report/ results/ results.tar.bz2 results.tar.gz tests/ work/
Ajouter des fichiers à une archive compressée (tar.gz/tar.bz2)¶
Nous avons déjà mentionné qu'il n'est pas possible d'ajouter des fichiers à des archives compressées. Si nous devons le faire, il faut décompresser les fichiers avec gunzip ou bunzip2. Une fois que nous avons obtenu le fichier tar, nous ajoutons les fichiers à cette archive en utilisant l'option r. Nous pouvons ensuite compresser à nouveau avec gzip ou bzip2.
Décompression¶
Extraire l'archive en entier¶
Pour décompresser ou extraire une archive, utilisez l'option -x (pour extract) avec -f (pour file); vous pouvez aussi ajouter -v (pour verbosity). Nous allons maintenant extraire l'archive results.tar. Pour extraire dans le même répertoire, il faut s'assurer qu'aucun autre répertoire n'a ce même nom. Pour éviter de réécrire les données s'il existe déjà un répertoire avec ce nom, nous allons rediriger l'extraction vers un autre répertoire avec l'option -C, en s'assurant que le répertoire de destination existe ou est créé avant de décompresser l'archive. Par exemple, créons le répertoire new_results pour y extraire les données de l'archive results.tar.
[user_name@localhost]$ tar -xvf results.tar -C new_results/
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
new.log.dat
report/
report/report-2016.pdf
report/report-a.pdf
[user_name@localhost]$ ls new_results/
new.log.dat report/ results/
Note
L'option v affiche uniquement les noms des fichiers qui ont été extraits de l'archive. Utilisez cette option deux fois pour obtenir plus de détails (utilisez tar -xvvf au lieu de tar -xvf).
Décompresser des fichiers gz et bz2¶
Pour les fichiers avec l'extension *.gz, utilisez gunzip.
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat.gz new_results/ programs/ report/ results/ results.tar.gz tests/ work/
[user_name@localhost]$ gunzip new.log.dat.gz
[user_name@localhost]$ gunzip results.tar.gz
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar tests/ work/
Pour les fichiers avec l'extension *.bz2, utilisez bunzip2.
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat.bz2 new_results/ programs/ report/ results/ results.tar.bz2 tests/ work/
[user_name@localhost]$ bunzip2 new.log.dat.bz2
[user_name@localhost]$ bunzip2 results.tar.bz2
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar tests/ work/
Extraire un fichier archive compressé vers un autre répertoire¶
Comme c'est le cas avec un fichier tar, un fichier archive compressée peut être extrait dans un autre répertoire avec l'option -C pour indiquer le répertoire de destination et l'option z pour les fichiers *.gz ou j pour les fichiers *.bz2. Avec le même exemple que précédemment, nous allons extraire l'archive results.tar.gz (ou results.tar.bz2) dans le répertoire new_results en une ou deux étapes.
Extraire le fichier archive compressé en une étape
Avec gz
[user_name@localhost]$ tar -xvzf results.tar.gz -C new_results/
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ tar -xzf results.tar.gz -C new_results/
[user_name@localhost]$ ls new_results/
results/
Avec l'extension bz2
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar.bz2 tests/ work/
[user_name@localhost]$ tar -xvjf results.tar.bz2 -C new_results/
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ ls new_results/
results/
Notes
-
Dans l'exemple précédent, il est possible de commencer avec l'option -C (le répertoire de destination), cependant, assurez-vous d'abord que le répertoire de destination existe puisque
tarne va pas le créer pour vous et s'il n'existe pas,tarva échouer. La commande est :ou
-
Si l'option -C (répertoire de destination) n'est pas utilisée, les fichiers seront extraits dans le même répertoire.
- L'option v (pour verbosity) affiche les fichiers et répertoires au fur et à mesure de leur extraction vers le nouveau répertoire.
- Pour afficher plus de détails (comme la date, la permission, etc.), ajoutez une autre option v comme suit :
tar -C new_results/ -xvvzf results.tar.gzoutar -C new_results/ -xvvjf results.tar.bz2. L'extraction du fichier archive compressé se fait en deux étapes.
Nous utilisons ici les mêmes commandes qu'auparavant, mais sans les options z ou j. D'abord, gunzip ou bunzip2 décompresse le fichier et ensuite tar -xvf pour détarer l'archive comme suit :
En supposant que nous avons le fichier compressé results.tar.bz2 :
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar.bz2 tests/ work/
[user_name@localhost]$ bunzip2 results.tar.bz2
[user_name@localhost]$ tar -C ./new_results/ -xvvf results.tar
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-20 15:16 results/Res-01/
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ ls new_results/results/
log1.dat log5.dat Res-01/ Res-02/
[user_name@localhost]$ ls new_results/results/
log1.dat Res-01/ Res-02/
Pour les fichiers *.gz
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar.gz tests/ work/
[user_name@localhost]$ gunzip results.tar.gz
[user_name@localhost]$ tar -C ./new_results/ -xvvf results.tar
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-20 15:16 results/Res-01/
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ ls new_results/results/
log1.dat Res-01/ Res-02/
Extraire un fichier d'une archive ou d'une archive compressée¶
Avec l'exemple précédent, nous allons d'abord créer l'archive results.tar pour archiver le répertoire et lister tous les fichiers qu'il contient, puis extraire un fichier vers le répertoire new_results.
[user_name@localhost]$ ls
bin/ documents/ jobs/ new.log.dat new_results/ programs/ report/ results/ results.tar tests/ work/
[user_name@localhost]$ tar -tvf results.tar
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-20 15:16 results/Res-01/
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
[user_name@localhost]$ ls new_results/
[user_name@localhost]$ tar -C ./new_results/ --extract --file=results.tar results/Res-01/log.15Feb16.4
[user_name@localhost]$ ls new_results/results/Res-01/log.15Feb16.4
new_results/results/Res-01/log.15Feb16.4
Dans cet exemple, le fichier results/Res-01/log.15Feb16.4 a été extrait de l'archive sans que l'archive soit décompressée en entier en utilisant l'option --extract. La commande crée les mêmes répertoires de l'archive dans le répertoire de destination.
Notes
- Avec cette commande, il faut absolument utiliser -C pour le répertoire de destination, autrement le fichier sera extrait vers le même répertoire que celui où se trouve l'archive, s'il existe.
- Ceci fonctionne pour extraire un fichier ou un répertoire, mais il faut indiquer le bon chemin.
- Cette commande peut être utilisée pour extraire plusieurs fichiers en y ajoutant le chemin complet, comme dans l'exemple précédent.
Vous pouvez utiliser la même commande pour extraire un fichier à partir d'un fichier tar compressé.
D'un fichier *.gz
[user_name@localhost]$ tar -C ./new_results/ --extract -z --file=results.tar.gz results/Res-01/log.15Feb16.4
[user_name@localhost]$ ls new_results/results/Res-01/log.15Feb16.4
new_results/results/Res-01/log.15Feb16.4
D'un fichier *.bz2
[user_name@localhost]$ tar -C ./new_results/ --extract -j --file=results.tar.bz2 results/Res-01/log.15Feb16.4
[user_name@localhost]$ ls new_results/results/Res-01/log.15Feb16.4
new_results/results/Res-01/log.15Feb16.4
Extraire plusieurs fichiers avec des caractères génériques (wildcards)¶
[user_name@localhost]$ tar -C ./new_results/ -xvf results.tar --wildcards "results/*.dat"
[user_name@localhost]$ ls new_results/results/
log1.dat
Avec la commande ci-dessus, nous avons extrait les fichiers qui sont dans le répertoire results et avec l'extension .dat.
Note
La commande est aussi valide avec les options j ou z pour les archives compressées, comme nous l'avons déjà vu. Avec notre exemple précédent, nous pouvons extraire tous les fichiers qui commencent par log, par exemple :
Contenu des fichiers d'archive¶
Lister le contenu¶
Si vous avez oublié ce que contient un fichier tar, il suffit d'en lister le contenu sans avoir à le décompresser avec tar -t :
[user_name@localhost]$ tar -tf results.tar
results/
results/log1.dat
results/Res-01/
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/
results/Res-02/log.15Feb16.balance.b.4
De plus, l'option -v fournit des métadonnées en rapport avec les fichiers comme les permissions, la date de la dernière modification, le propriétaire, comme vous le verriez avec ls -l pour des fichiers non archivés.
[user_name@localhost]$ tar -tvf results.tar
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-16 19:36 results/Res-01/
-rw-r--r-- name name 11672 2016-11-16 15:10 results/Res-01/log.15Feb16.1
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
Si vous voulez connaître le nombre de fichiers dans un fichier tar, vous pouvez ajouter aux commandes précédentes le trait vertical | avec wc -l (pour word count et lines), ce qui fournit le nombre de lignes dans le résultat de la commande devant le trait vertical.
ou
Avec cet exemple, nous voyons qu'il y a 7 entrées dans le fichier tar, ce qui inclut tous les fichiers et sous-répertoires pour le répertoire et avec le répertoire lui-même. Mentionnons que les détails des fichiers ne sont pas affichés même avec l'utilisation de l'option –v parce que les résultats de la première commande sont filtrés par la commande wc –l qui affiche le nombre de lignes sans les détails.
Pour les commandes précédentes, les options peuvent être utilisées séparément, par exemple :
- l'option -tvf équivaut à -t -v -f
- l'option -v équivaut à
--verbose - l'option -t équivaut à
--list - l'option
--file=results.taréquivaut à-f results.tar
Note
L'option -f ou --file= précède toujours le nom du fichier tar.
Chercher un fichier dans un fichier archive sans avoir à le décompresser¶
Nous avons vu comment lister les fichiers dans une archive. Il est aussi possible de lister les fichiers et de chercher un fichier particulier avec le trait vertical et la commande grep. Par exemple, pour trouver log.15Feb16.4 (dont le chemin est results/Res-01/log.15Feb16.4) :
[user_name@localhost]$ tar -tf results.tar | grep -a log.15Feb16.4
results/Res-01/log.15Feb16.4
[user_name@localhost]$ tar -tvf results.tar | grep -a log.15Feb16.4
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
Nous allons maintenant essayer de trouver un autre fichier nommé pbs_file (qui n'existe pas vraiment dans notre archive).
[user_name@localhost]$ tar -tf results.tar | grep -a pbs_file
[user_name@localhost]$ tar -tvf results.tar | grep -a pbs_file
Comme vous pouvez le constater, le résultat de la commande est vide, ce qui signifie que le fichier n'existe pas dans cette archive.
Pour lister par exemple les fichiers qui commencent par log (ou toute autre chaîne de caractères) dans l'archive, entrez :
[user_name@localhost]$ tar -tf results.tar | grep -a log*
results/log1.dat
results/Res-01/log.15Feb16.1
results/Res-01/log.15Feb16.4
results/Res-02/log.15Feb16.balance.b.4
Pour obtenir plus de détails, ajoutez l'option -v :
[user_name@localhost]$ tar -tvf results.tar | grep -a log*
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
-rw-r--r-- name name 11672 2016-11-16 15:10 results/Res-01/log.15Feb16.1
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
Note
Pour lister les fichiers dans une archive ou dans un fichier compressé, vous pouvez aussi utiliser la commande more après le trait vertical.
Lister le contenu d'un fichier compressé (*.gz ou .bz2)¶
Comme nous l'avons vu dans le cas d'un fichier tar, il est possible de combiner la commande tar avec l'option z pour lister le contenu d'une archive compressée avec gzip sans avoir à décompresser le fichier, ou encore l'option j pour lister le contenu d'une archive compressée avec bzip2.
Pour des fichiers *.gz
[user_name@localhost]$ tar -tvzf results.tar.gz
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-16 19:36 results/Res-01/
-rw-r--r-- name name 11672 2016-11-16 15:10 results/Res-01/log.15Feb16.1
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
-rw-r--r-- name name 10905 2016-11-20 11:16 new.log.dat
drwxrwxr-x name name 0 2016-11-20 11:02 report/
-rw-r--r-- name name 924729 2015-11-20 04:14 report/report-2016.pdf
-rw-r--r-- name name 924729 2015-11-20 04:14 report/report-a.pdf
Pour les fichiers *.bz2
[user_name@localhost]$ tar -tvjf results.tar.bz2
drwxrwxr-x name name 0 2016-11-20 11:02 results/
-rw-r--r-- name name 10905 2016-11-16 16:31 results/log1.dat
drwxrwxr-x name name 0 2016-11-16 19:36 results/Res-01/
-rw-r--r-- name name 11672 2016-11-16 15:10 results/Res-01/log.15Feb16.1
-rw-r--r-- name name 11682 2016-11-16 15:10 results/Res-01/log.15Feb16.4
drwxrwxr-x name name 0 2016-11-16 19:37 results/Res-02/
-rw-r--r-- name name 34117 2016-11-16 15:10 results/Res-02/log.15Feb16.balance.b.4
Notes
- Encore une fois, dans cet exemple, nous utilisons l'option v pour afficher tous les détails, même si elle n'est pas obligatoire.
- Les deux commandes précédentes peuvent aussi être combinées avec le trait vertical (
|) etwc; ou le trait vertical (|) et la commandegrep, comme nous l'avons déjà vu.
Autres utilitaires¶
Taille des fichiers, répertoires et archives¶
À partir de votre terminal, utilisez la commande du -sh [votre_fichier ...].
Fractionner des fichiers¶
En connaissant la taille de vos fichiers ou répertoires, vous pouvez les diviser en plusieurs fichiers d'archive pour ne pas avoir à travailler avec de trop gros fichiers. Ceci fonctionne également avec les fichiers archive. Vous pouvez diviser un gros fichier ou un fichier tar en plusieurs parties comme suit :
split -b <Taille-en-Mo><nom-du-fichier-ou-fichier-tar><nom-préfixe>
split -b 100MB results.tar small-res
L'option b détermine la taille des morceaux et nom-préfixe est le nom des petits fichiers. La commande ci-dessus divise le fichier results.tar en petits fichiers de 100 Mo chacun dans le répertoire courant et les noms des fichiers commencent par small-resaa small-resab small-resac small-resad .... etc.
Pour retrouver le fichier original, utilisez la commande cat comme suit :
La commande split permet de diviser les gros fichiers en petites portions en l'utilisant avec la taille des portions (-b taille en Mo) puis en transférant toutes les portions. Une fois le transfert effectué, utilisez la commande cat pour récupérer le fichier original ou l'archive. Pour ajouter des chiffres plutôt que des lettres, utilisez l'option -d.
Commandes fréquemment employées¶
-
pwdmontre le chemin de travail actuel (pwd pour present work directory) -
lsliste les fichiers et sous-répertoires (ls pour list) -
du -shmontre la taille des fichiers, répertoires et sous-répertoires (du pour disk usage) -
!!! important "Important"Les commandesgzipoubzip2ajoutées à un fichier (votre_fichier ou votre_archive.tar) exigent de l'espace libre, comme c'est le cas pour la commandetarpour créer le fichier compressé résultant (votre_fichier.gz ou votre_fichier.bz2) ou (votre_archive.tar.gz ou votre_archive.tar.bz2). Ces commandes échoueront s'il ne reste plus d'espace ou si votre quota est atteint. Sur nos grappes, utilisez la commandequotaouquota –sà partir de votre terminal pour savoir si vous avez suffisamment d'espace pour des données additionnelles. -
Exécuter
tarpour un répertoire (results) : -
Exécuter
tarpour plusieurs fichiers ou répertoires en les rassemblant dans un seul fichier archive : -
Exécuter
tarpour tous les fichiers ou répertoires qui commencent par la lettre r ou une chaîne de caractères : -
Lister le contenu d'un fichier tar (results.tar) incluant les détails :
-
Lister le contenu d'un fichier tar (results.tar) sans les détails :
-
Compter le nombre d'entrées dans le fichier tar :
-
Chercher un fichier (nom_du_fichier_recherché) dans un fichier archive (votre_archive.tar) sans décompresser l'archive :
-
Ne lister que les fichiers dont les noms contiennent (au début, à la fin ou à l'intérieur) une chaîne particulière; ici par exemple les fichiers qui commencent par log :
-
Ajouter un ou plusieurs fichiers ou un nouveau fichier (ici nouveau_fichier) à la fin du fichier tar votre_archive.tar :
Note
Il n'est pas possible d'ajouter des fichiers à des archives compressées (.gz ou .bzip2). Des fichiers peuvent être ajoutés à des archives tar simples (
*.tar). -
Ajoutez le répertoire nouveau_répertoire au fichier votre_archive.tar existant :
-
Concaténer des archives (archive_02.tar à archive_01.tar) avec l'option -A :
-
Extraire tout le fichier archive (votre_archive.tar) :
-
Extraire tout le fichier archive (votre_archive.tar) dans un répertoire particulier (répertoire_de_destination) :
-
Compresser un fichier (fichier0) ou des fichiers (fichier1 fichier2 fichier3 fichier4 fichier5) dans un fichier archive (votre_archive.tar) avec la commande
gzip: -
Compresser un fichier (fichier0) ou des fichiers (fichier1 fichier2 fichier3 fichier4 fichier5) dans un fichier archive (votre_archive.tar) avec la commande
bzip2: -
Compresser avec les options z ou j pour
gzipoubziprespectivement : -
Exclure des fichiers particuliers (par exemple ceux qui commencent par la lettre o) à la création d'un fichier tar :
-
Décompresser des fichiers
*.gzou*.bz2:Pour les fichiers avec l'extension
*.gz, utilisezgunzip:Pour les fichiers avec l'extension
*.bz2, utilisezbunzip2: -
Lister le contenu d'un fichier compressé (
*.gzou*.bz2) :[user_name@localhost]$ tar -tvzf your_archive.tar.gz [user_name@localhost]$ tar -tvjf your_archive.tar.bz2Notes
- Encore une fois, dans cet exemple, nous utilisons l'option v pour afficher tous les détails, même si elle n'est pas obligatoire.
- Les deux commandes précédentes peuvent aussi être combinées avec le trait vertical (
|) etwc; ou le trait vertical (|) et la commandegrep, comme nous l'avons déjà vu.
-
Extraire un fichier archive compressé vers un autre répertoire :
-
Extraire et récupérer des données d'un fichier archive compressé en deux étapes :
Pour les fichiers
*.bz2[user_name@localhost]$ bunzip2 your_archive.tar.bz2 [user_name@localhost]$ tar -C destination_dir -xvf your_archive.tarPour les fichiers
*.gz -
Extraire un fichier d'une archive ou d'une archive compressée dans un autre répertoire :
[user_name@localhost]$ tar -C ./destination_dir/ --extract --file=your_archive.tar path-to-your-file [user_name@localhost]$ tar -C ./destination_dir/ --extract --file=results.tar "file1" "file2" "file3"Note
Indiquez explicitement le chemin vers le fichier à extraire.
-
La commande précédente peut aussi être utilisée pour extraire un fichier à partir d'un fichier tar compressé :
Pour un fichier
gz[user_name@localhost]$ tar -C ./destination_dir/ --extract -z --file=your_archive.tar.gz path-to-your-filePour un fichier
bz2 -
Extraire plusieurs fichiers en utilisant un caractère générique, par exemple les fichiers avec
*.dat: -
Pour conserver les liens symboliques avec la commande
tar, utilisez l'option h : -
Ajouter des fichiers à des archives compressées (
*.tar.gzou*.tar.bz2) :Pour ajouter des fichiers directement à une archive compressée, décompressez d'abord le fichier archive, ajoutez les fichiers comme nous l'avons vu précédemment, puis compressez de nouveau.
-
Déterminer la taille des fichiers ou des répertoires :
-
Diviser un fichier ou un fichier tar :
Par exemple, utilisez 1000 Mo pour chaque petit fichier :
Pour retrouver le fichier original :
```bash [user_name@localhost]$ cat small_res* > your_archive_name.tar