Newer
Older
cours-unix-shell / src / commandes / compression.md
# Archives, compression, décompression

## tar

Cette commande permet de créer un fichier archive (appelé *tarfile*) qui peut
contenir des fichiers et répertoires.  
Ce fichier *tarfile* n'est pas compressé.  
Cette commande peut être utile pour archiver un répertoire et tout ce qu'il
contient en un seul fichier.

```bash
tar -cvf Archives.tar Sauvegarde
```

La commande ci-dessus, avec les paramètres `-cvf`, permet de créer une archive
du répertoire `Sauvegarde` dans le fichier nommé `Archives.tar`.  
Attention à l'ordre des deux derniers paramètres.

```bash
tar -xvf Archives.tar
```

La même commande `tar` avec les paramètres `-xvf`, permet de désarchiver le
contenu du *tarfile*.  
Attention au positionnement du désarchivage : il s'opère dans le répertoire
courant.

Pour connaître le détail du contenu d'un *tarfile*, il faut utiliser les
paramètres `-tvf`.

## gzip

Cette commande permet de compresser un fichier afin d'en réduire la taille, pour
stockage ou échange.  
Le fichier résultat est renommé par ajout de l'extension `.gz` :

```bash
gzip corpus.xml
```

Par listing du contenu du répertoire où la compression a été réalisée, on peut voir que le fichier `corpus.xml` a disparu et a été remplacé par `corpus.xml.gz`.

Il est possible d'obtenir la taille d'un fichier non compressé à partir de son fichier compressé en gzip.

```bash
gzip -l corpus.xml.gz
```

Quatre informations sont alors affichées à l'écran :

1. la taille en octets du fichier compressé
2. la taille en octets du fichier non compressé
3. le ratio de compression
4. le nom du fichier initial, non compressé

```txt
compressed uncompr. ratio uncompressed_name
77366      370713   79.1% corpus.xml
```

## gunzip

Cette commande permet de décompresser un fichier compressé en `.gz`.  
Sans paramètres, le fichier est décompressé sur disque et renommé sans
l'extension `.gz`.  
Attention, la place en octets prise correspond bien au fichier décompressé.  
Cette commande est équivalente à `gzip -d`.

```bash
gunzip corpus.xml.gz
```

La commande ci-dessus restaure le fichier `corpus.xml`, qui remplace dans le
répertoire courant l'ancien fichier `corpus.xml.gz` de plus petite taille.

S'il faut travailler avec un fichier compressé sans le décompresser sur disque,
il faut alors qu'il soit seulement décompressé vers la sortie standard.  
Ensuite, il suffira d'enchaîner les commandes requises avec des pipes.  
Par exemple :

```bash
gunzip -c corpus.xml.gz | wc -l
```

## zcat

Cette commande est équivalente à `gunzip -c`.

```bash
zcat corpus.xml.gz | wc -l
```