22/11/2024

Commandes et Système

Compresser et décompresser des fichiers ZIP sous Linux, avec les commandes zip et unzip

I. Présentation

Dans ce tutoriel, nous allons apprendre à compresser et décompresser des fichiers ZIP sous Linux. Bien qu'il existe d'autres formats d'archives, comme TAR, le format ZIP reste le format le plus populaire lorsque l'on cherche à compresser des fichiers et des dossiers.

Que ce soit sur Windows ou sur Linux, le format ZIP est pris en charge et en tant qu'administrateur système, vous devez être capable de compresser et décompresser une archive ZIP sous Linux. C'est ce que nous allons voir aujourd'hui ! Une machine Debian sera utilisée, mais vous pouvez utiliser une autre distribution.

Version initiale de l'article : 14 février 2012

II. Installation des paquets ZIP et UNZIP

Afin de pouvoir compresser et décompresser des archives ZIP sous Linux, vous devez commencer par installer les bons paquets ! Autrement dit, vous devez installer les paquets "zip" et "unzip", comme ceci :

sudo apt-get update
sudo apt-get install zip unzip

Une fois que c'est fait, vous pouvez passer à la suite.

III. Compresser des fichiers en archive ZIP

A. Premiers pas avec la commande ZIP sous Linux

Commençons par étudier le fonctionnement de la commande "zip", dont voici la syntaxe :

zip <option> <nom du fichier ZIP à créer> <fichiers sources à ajouter>

Afin d'effectuer un test, nous allons générer 10 fichiers : document1.txt, document2.txt, etc... jusqu'à document10.txt. Ces fichiers seront ensuite ajoutés à une archive ZIP.

Nous pouvons utiliser cette commande pour créer les fichiers :

touch document{1..10}.txt

Voilà, 10 fichiers viennent d'être créés dans le répertoire courant.

Désormais, nous allons créer une archive ZIP nommée "documents" qui va contenir ces 10 fichiers :

zip documents document1.txt document2.txt document3.txt document4.txt <etc...> document10.txt
# Que l'on peut aussi raccourcir de cette façon :
zip documents document*.txt

Cette commande nous permet bien d'obtenir le fichier "documents.zip" :

D'ailleurs, nous pourrions afficher le contenu de l'archive "documents.zip", ceci permettrait de voir réellement ce qu'elle contient. Ceci peut s'avérer utile pour regarder le contenu d'une archive ZIP avant de la décompresser. Dans ce cas, nous allons utiliser l'option "-sf" pour Show Files :

zip -sf documents.zip
Afficher le contenu archive ZIP sous Linux

Une autre façon de faire, c'est d'utiliser la commande "zipinfo" fournie avec le paquet zip :

zipinfo documents.zip

B. Compresser un répertoire complet en archive ZIP

Nous allons continuer à apprendre à utiliser la commande zip avec d'autres exemples. Plutôt que d'ajouter des fichiers à une archive ZIP, parfois, il est plus rapide et plus simple d'ajouter tout un dossier.

Si l'on souhaite compresser tout le répertoire "/home/flo/zip" afin d'obtenir le fichier "dossier.zip", nous allons utiliser la commande suivante :

zip -r dossier /home/flo/zip/

Il est à noter que l'option "-r" indique la récursivité, cela signifie que l'archive ZIP va contenir tous les fichiers et dossiers présents dans "/home/flo/zip/".

C. Ajouter uniquement les fichiers d'un certain type

L'utilisation du caractère "*" (wildcard) peut s'avérer très utile pour ajouter à une archive ZIP uniquement les fichiers correspondant à un certain type. Le caractère "*" sera remplacé par tous les caractères (pour 1 ou plusieurs caractères).

Par exemple, si l'on souhaite ajouter à l'archive ZIP tous les fichiers ".txt", nous utiliserons cette syntaxe :

zip -r fichierstxt *.txt

Pour l'exemple précédent basé sur l'ajout de 10 fichiers à une archive ZIP, ceci peut aussi s'avérer utile :

zip documents document*.txt

D. Exclure des fichiers lors de la création du ZIP

A l'inverse, nous pourrions chercher à exclure certains fichiers lors de la création de l'archive ZIP. Par exemple, si l'on a un fichier "document.docx" aux côtés de nos fichiers "document.txt", nous pouvons l'exclure grâce à l'option "-x". L'objectif sera d'exclure tous les fichiers ".docx".

Voici la syntaxe à utiliser (avec le symbole *, on cible le contenu du répertoire "/home/flo/zip/".

zip documentstxt /home/flo/zip/* -x \*.docx

Le résultat ci-dessous montre bien que le fichier n'a pas été ajouté à l'archive ZIP :

exclure fichiers archive zip linux

E. Comment protéger par mot de passe l'archive ZIP ?

Par défaut, les archives ZIP ne sont pas protégées par un mot de passe, donc n'importe qui peut accéder au contenu de l'archive compressée. Sachez que l'option "-e" peut nous permettra de chiffrer l'archive ZIP et d'ajouter une protection par mot de passe.

zip -e documents document1.txt document2.txt document3.txt

Ce qui donne le résultat suivant :

protéger archive zip par mot de passe linux

Nous pouvons toujours lister le contenu de l'archive ZIP, mais, il sera impossible de décompresser l'archive ZIP sans connaître le mot de passe.

F. Ajuster le niveau de compression

Lorsque l'on crée une archive ZIP, nous pouvons ajuster le niveau de compression. Le fait d'utiliser un niveau de compression plus élevé, va permettre de réduire la taille du fichier ZIP obtenu en sortie. Ceci sera également plus gourmand en ressources et en temps pour générer l'archive ZIP.

ZIP prend en charge 9 niveaux de compression, de 1 à 9. Le niveau de compression "9" étant le plus élevé. La valeur "0" est aussi acceptée, mais pour stocker uniquement du contenu, sans aucune compression. Ainsi, si l'on veut utiliser un niveau de compression spécifique, il suffira de le préciser de cette façon :

zip -<0-9> documents document1.txt document2.txt

Par exemple, pour utiliser le niveau de compression maximal :

zip -9 documents document1.txt document2.txt

G. Ajouter un fichier à une archive ZIP existante

Pour finir, nous allons utiliser l'option "-u" pour ajouter un fichier à une archive ZIP existante, sans avoir besoin de "casser" l'archive ZIP pour la refaire. Par exemple, voici comment ajouter le fichier "document.docx" à l'archive ZIP "documentstxt.zip" :

zip -u documentstxt.zip document.docx

IV. Décompresser une archive ZIP

A. Premiers pas avec la commande UNZIP sous Linux

Vous avez téléchargé une archive ZIP d'un projet disponible sur GitHub, et vous ignorez comment décompresser le contenu de cette archive ZIP ? C'est un cas fréquent ! Nous allons voir comment utiliser la commande "unzip" pour décompresser une archive ZIP.

Pour décompresser un fichier, utilisez simplement la commande suivante :

unzip <nom fichier ZIP>
unzip documentstxt.zip

Cette commande décompresse "documentstxt.zip" dans le répertoire courant (vis-à-vis de votre shell).

Sachez qu'avant de décompresser une archive ZIP, vous pouvez lister son contenu, au même titre que l'on peut le faire avec les commandes "zip" et "zipinfo".

unzip -l documentstxt.zip

Nous pouvons visualiser le contenu de l'archive ZIP, avec le poids de chaque fichier, la date et l'heure, ainsi que le nom du fichier. Nous avons aussi une information intéressante : le nombre de fichiers présents dans l'archive ZIP.

Affichier contenu archive ZIP avec unzip

B. Décompresser une archive ZIP dans un répertoire spécifique

Si vous souhaitez décompresser une archive ZIP dans un répertoire spécifique de votre machine, plutôt que dans le répertoire courant, utilisez cette syntaxe :

unzip documentstxt.zip -d /chemin/vers/repertoire

Par exemple, nous pouvons décompresser l'archive dans "/tmp" :

unzip documentstxt.zip -d /tmp

C. Décompresser une archive ZIP protégée par mot de passe

Pour décompresser une archive ZIP qui est chiffrée et protéger par un mot de passe, vous avez plusieurs options :

  • Utiliser unzip sans option spécifique, et il faudra saisir le mot de passe de l'archive ZIP de façon interactive.
  • Utiliser unzip avec l'option "-P" pour spécifier le mot de passe directement dans la console

Au cas où l'archive ZIP "documents.zip" est protégée par le mot de passe "Azerty123", il conviendra d'utiliser cette commande :

unzip -P Azerty123 documents.zip

Décompresser une archive zip protégée par mot de passe :

D. Extraire un fichier spécifique d'une archive ZIP

Si vous souhaitez extraire un fichier d'une archive ZIP sans décompresser toute l'archive ZIP, sachez que c'est possible ! Dans ce cas, il n'y a pas d'option spécifique à utiliser. Vous devez simplement préciser le nom du fichier à extraire (ceci ne le retire pas de l'archive ZIP !).

Par exemple, pour extraire le fichier "document.docx" de l'archive ZIP "documentstxt.zip", voici la commande à exécuter :

unzip documentstxt.zip document.docx

La commande retournera la phrase "extracting: document.docx".

E. Décompresser en masse des archives ZIP

Si vous souhaitez décompresser un ensemble d'archives ZIP en une fois, sachez que c'est possible grâce à l'utilisation du caractère "*" (wildcard). Utilisez seulement la commande suivante :

unzip "*.zip"

Ceci permet de gagner du temps si vous avez beaucoup d'archives ZIP à décompresser. Sinon, vous pouvez spécifier leurs noms de cette façon :

unzip archive1.zip archive2.zip archive3.zip

Vous pouvez aussi coupler cette commande avec l'option "-d" pour spécifier un répertoire de destination.

V. Conclusion

Voilà, nous venons de voir comment compresser et décompresser des archives ZIP sous Linux ! J'espère que ces exemples vous aideront à comprendre comment utiliser les commandes "zip" et "unzip" de manière plus efficace sous Linux !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.