Commande zip : compresser un dossier, décompresser avec unzip et options de compression

Environnement de testFamille RHELAlmaLinux 9.8Compte rootVérifié le 2026-11-05
Commandes de compression et d'archivagezipunzipEmplacement/usr/bin/zip
Compresser un dossier et décompresser avec unzip

La commande zip regroupe sous Linux des fichiers et des dossiers dans un seul fichier zip compressé, et unzip sert à le décompresser. Sur un serveur AlmaLinux 9, le dossier d'un site web compressé avec zip -r est passé de 35 825 octets à 4 158 octets, et unzip -O a corrigé les noms de fichiers illisibles d'un zip créé sous Windows.

Les sorties ci-dessous proviennent d'un dossier de travail sur un serveur AlmaLinux 9.8, exécutées en root, avec les heures en UTC. Le dossier site et les fichiers de notes compressés sont des fichiers d'exemple créés pour le test. Le zip créé sous Windows a été reproduit avec un fichier de test dont les noms de fichiers sont enregistrés en CP949.

1️⃣ Utiliser la commande zip

  • ↪️ Compresser des fichiers et des dossiers (-r)

Après zip, écrivez d'abord le nom du nouveau fichier zip, puis la liste des fichiers à y mettre. La commande ci-dessous compresse deux fichiers, readme.txt et memo.txt, dans un seul notes.zip.

zip notes.zip readme.txt memo.txt
  adding: readme.txt (deflated 92%)
  adding: memo.txt (stored 0%)

Le [deflated 92%] en fin de ligne indique de combien la taille a diminué par rapport à l'original. Le [stored 0%] sur la ligne de memo.txt, qui fait 71 octets, signifie que le fichier a été stocké à sa taille d'origine, sans compression.

Pour compresser un dossier, ajoutez -r. Sans -r, si vous écrivez seulement le nom du dossier, l'archive ne contient que l'entrée de dossier site/, sans les fichiers qu'il contient.

zip nodir.zip site
  adding: site/ (stored 0%)

Le dossier site à compresser contient trois sous-dossiers et six fichiers, comme ci-dessous.

site/
css/
style.css
js/
app.js
logs/
access.log
index.html
about.html
.htaccess

Avec -r, les dix entrées y entrent : les sous-dossiers, leurs fichiers et même .htaccess, dont le nom commence par un point.

zip -r site.zip site
  adding: site/ (stored 0%)
  adding: site/css/ (stored 0%)
  adding: site/css/style.css (deflated 93%)
  adding: site/js/ (stored 0%)
  adding: site/js/app.js (deflated 87%)
  adding: site/logs/ (stored 0%)
  adding: site/logs/access.log (deflated 94%)
  adding: site/index.html (deflated 91%)
  adding: site/about.html (deflated 87%)
  adding: site/.htaccess (deflated 9%)

Pour voir ce que contient un fichier zip terminé sans le décompresser, utilisez unzip -l. Les fichiers stockés totalisaient 35 825 octets, et ls -l affichait site.zip à 4 158 octets.

unzip -l site.zip
Archive:  site.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  10-28-2026 22:10   site/
        0  10-28-2026 22:10   site/css/
     4431  10-28-2026 22:10   site/css/style.css
        0  10-28-2026 22:10   site/js/
     1882  10-28-2026 22:10   site/js/app.js
        0  10-28-2026 22:10   site/logs/
    24134  10-28-2026 22:10   site/logs/access.log
     3723  10-28-2026 22:10   site/index.html
     1612  10-28-2026 22:10   site/about.html
       43  10-28-2026 22:10   site/.htaccess
---------                     -------
    35825                     10 files
ls -l site.zip
-rw-r--r-- 1 root root 4158 Oct 28 23:05 site.zip

2️⃣ Options de la commande zip

  • ↪️ -x, -u, -d, niveau de compression, -e

Parmi les options de la commande zip, -x exclut les fichiers correspondant à un motif. En indiquant [site/logs/*] pour laisser de côté le dossier des journaux, le dossier logs et access.log sont exclus, et seules huit entrées y entrent.

zip -r site-nolog.zip site -x 'site/logs/*'
  adding: site/ (stored 0%)
  adding: site/css/ (stored 0%)
  adding: site/css/style.css (deflated 93%)
  adding: site/js/ (stored 0%)
  adding: site/js/app.js (deflated 87%)
  adding: site/index.html (deflated 91%)
  adding: site/about.html (deflated 87%)
  adding: site/.htaccess (deflated 9%)

Entourez le motif de guillemets simples pour que le shell ne transforme pas d'abord [*] en noms de fichiers. Dans le même but, le manuel officiel donne un exemple avec une barre oblique inverse devant [*].

-u ne remet que les fichiers modifiés après la création du fichier zip. Après l'ajout d'une ligne à la fin de index.html, l'exécution avec -ru ne remet que ce seul fichier, en tant que [updating].

zip -ru site.zip site
updating: site/index.html (deflated 90%)

En relançant la même commande sans fichier modifié, rien ne s'est affiché, et le code de sortie était 12. Dans le manuel officiel, 12 signifie que zip n'a rien à faire.

zip -ru site.zip site; echo $?
12

Pour supprimer des entrées dans un fichier zip, utilisez -d. En indiquant [site/logs/*], l'entrée du dossier logs et access.log sont supprimés de site.zip.

zip -d site.zip 'site/logs/*'
deleting: site/logs/
deleting: site/logs/access.log

Les chiffres de -0 à -9 fixent le niveau de compression, et selon le manuel officiel la valeur par défaut est -6. Le même dossier site a été compressé trois fois avec -q, sans affichage, pour comparer les tailles. Comme une ligne avait été ajoutée à index.html lors du test de -u, le total des fichiers d'origine est alors de 35 875 octets.

zip -qr -0 level0.zip site
zip -qr level6.zip site
zip -qr -9 level9.zip site
ls -l level*.zip
-rw-r--r-- 1 root root 37433 Oct 28 23:05 level0.zip
-rw-r--r-- 1 root root  4179 Oct 28 23:05 level6.zip
-rw-r--r-- 1 root root  3874 Oct 28 23:05 level9.zip
Niveau de compressionTaille du fichier zipPar rapport au total d'origine
Total des fichiers d'origine35 875 octets100%
-0 (sans compression)37 433 octets104.3%
-6 (par défaut)4 179 octets11.6%
-9 (compression maximale)3 874 octets10.8%

Les 37 433 octets obtenus avec -0 dépassaient le total d'origine de 35 875 octets. C'est la taille des données non compressées plus 1 558 octets d'en-têtes, comme les noms de fichiers et les heures, ajoutés à chaque entrée. -9 a donné 305 octets de moins que la valeur par défaut, et toute la différence venait du plus gros fichier, access.log.

Pour mettre un mot de passe, ajoutez -e. Le mot de passe se saisit deux fois, et les caractères saisis ne s'affichent pas à l'écran.

zip -e secret.zip memo.txt
Enter password:
Verify password:
  adding: memo.txt (stored 0%)

Même secret.zip, créé avec -e, affichait sous unzip -l les noms, tailles et dates des fichiers sans mot de passe. Seul le contenu des fichiers est chiffré : cela ne convient donc pas aux données dont les noms de fichiers doivent aussi rester cachés.

unzip -l secret.zip
Archive:  secret.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       71  10-28-2026 22:10   memo.txt
---------                     -------
       71                     1 file

-P, qui place le mot de passe directement sur la ligne de commande, est une option que le manuel officiel signale comme peu sûre, car les autres utilisateurs du même serveur peuvent voir les commandes en cours. Le manuel décrit aussi le chiffrement standard de zip lui-même comme relativement faible.

Pour décompresser un zip créé avec -e, unzip demande le mot de passe pour chaque fichier, et le fichier est décompressé une fois le bon mot de passe saisi.

unzip secret.zip -d dec
Archive:  secret.zip
[secret.zip] memo.txt password:
 extracting: dec/memo.txt

📌 Options principales : résultats de cet article

OptionRôleRésultat dans cet article
zip -rMet tous les sous-dossiers et fichiers du dossierSans -r, une ligne adding: site/ ; avec -r, dix entrées y compris .htaccess
zip -xExclut les fichiers correspondant à un motifSans site/logs/*, seulement huit entrées, sans le dossier logs ni access.log
zip -uRemet uniquement les fichiers modifiés après la création du zipUne ligne updating: site/index.html (deflated 90%) ; sans modification, aucune sortie et code de sortie 12
zip -dSupprime des entrées dans le fichier zipdeleting: site/logs/ et deleting: site/logs/access.log
zip -qMasque les lignes affichées pendant la compressionLes trois commandes compressées avec -qr (-0, défaut, -9) se terminent sans ligne adding
zip -0Stocke sans compresserlevel0.zip fait 37433 octets, plus que le total d'origine
zip -9Compresse au plus petit (défaut -6)level9.zip 3874 octets ; level6.zip, créé avec la valeur par défaut, 4179 octets
zip -eDemande un mot de passe et chiffre le contenuDemande Enter password: et Verify password:, puis adding: memo.txt (stored 0%)
unzip -lAffiche la liste des entrées stockées sans décompressersite.zip avec 10 files, 35825 octets au total
unzip -dIndique le dossier de destination et le crée s'il n'existe pasCommence par creating: restore/site/, et l'arborescence du dossier site est décompressée sous restore
unzip -oÉcrase tous les fichiers existants sans demanderCinq lignes inflating sans question
unzip -nIgnore les fichiers existants sans demanderRien n'apparaît après la ligne Archive: site.zip
unzip -tTeste les données compressées sans décompresserOK pour chaque entrée et No errors detected ; le broken.zip tronqué donne End-of-central-directory signature not found
unzip -OIndique l'encodage des caractères des noms de fichiers dans le zipAvec -O CP949, les noms illisibles s'affichent comme 보고서.txt et 견적서.txt (« rapport » et « devis » en coréen)
unzip -pEnvoie le contenu décompressé sur la sortie standard au lieu de créer des fichiersSeules les deux lignes de .htaccess s'affichent, sans création de fichier

📎 Autres options : selon le manuel officiel

OptionRôle
zip -mSupprime les fichiers et dossiers d'origine après la compression (une fois le fichier zip terminé ; le manuel officiel recommande de l'utiliser avec -T)
zip -jStocke uniquement les noms de fichiers, sans les chemins de dossiers
zip -yStocke un lien symbolique en tant que lien au lieu du fichier vers lequel il pointe
zip -TTeste le zip créé et laisse le zip d'origine inchangé si le test échoue
zip -fRemplace par les fichiers modifiés uniquement les entrées déjà présentes dans le zip, sans ajouter de nouveaux fichiers
zip -iMet uniquement les fichiers correspondant au motif indiqué
zip -PÉcrit le mot de passe directement sur la ligne de commande (le manuel officiel le signale comme peu sûr)
unzip -jDécompresse uniquement les fichiers dans un seul dossier, sans recréer l'arborescence du zip
unzip -xIndique les entrées à ne pas décompresser
unzip -qMasque les lignes affichées pendant la décompression
unzip -uDécompresse uniquement les fichiers absents du disque et ceux qui sont plus récents
unzip -vAjoute à la liste la méthode de compression, la taille compressée, le taux et le CRC

3️⃣ Utiliser la commande unzip

  • ↪️ Décompresser un zip sous Linux avec -d, -o et -n

Pour décompresser un fichier zip sous Linux, écrivez le nom du fichier zip après unzip. Sans -d pour fixer le dossier, les fichiers sont décompressés dans le dossier courant (selon le manuel officiel) ; cette fois, le dossier restore a donc été indiqué.

unzip site.zip -d restore
Archive:  site.zip
   creating: restore/site/
   creating: restore/site/css/
  inflating: restore/site/css/style.css
   creating: restore/site/js/
  inflating: restore/site/js/app.js
  inflating: restore/site/index.html
  inflating: restore/site/about.html
  inflating: restore/site/.htaccess

Si le dossier indiqué avec -d n'existe pas, unzip le crée et y décompresse l'arborescence du dossier site telle quelle.

Si vous décompressez de nouveau au même endroit, unzip s'arrête à chaque fichier déjà présent et demande s'il faut l'écraser. En choisissant [N]one, l'opération se termine sans écraser aucun des fichiers restants.

unzip site.zip -d restore
Archive:  site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: N

Pour ne pas avoir de question, ajoutez -o ou -n. -o écrase tous les fichiers existants et -n les ignore. Le manuel officiel classant -o parmi les options dangereuses, vérifiez d'abord que le dossier peut être écrasé avant d'ajouter -o.

unzip -o site.zip -d restore
Archive:  site.zip
  inflating: restore/site/css/style.css
  inflating: restore/site/js/app.js
  inflating: restore/site/index.html
  inflating: restore/site/about.html
  inflating: restore/site/.htaccess
unzip -n site.zip -d restore
Archive:  site.zip

En décompressant avec -n là où tous les fichiers existent déjà, rien n'apparaît après la ligne Archive.

Pour ne décompresser qu'une partie d'un fichier zip, écrivez un chemin ou un motif après le nom du fichier zip. En indiquant [site/css/*], seuls le dossier css et style.css sont décompressés.

unzip site.zip 'site/css/*' -d part
Archive:  site.zip
   creating: part/site/css/
  inflating: part/site/css/style.css

4️⃣ Erreurs d'unzip

  • ↪️ End-of-central-directory et noms de fichiers illisibles

Testez avec unzip -t un fichier zip reçu d'un autre serveur avant de le décompresser. Si les données compressées n'ont pas de problème, chaque entrée affiche OK et la dernière ligne indique [No errors detected].

unzip -t site.zip
Archive:  site.zip
    testing: site/                    OK
    testing: site/css/                OK
    testing: site/css/style.css       OK
    testing: site/js/                 OK
    testing: site/js/app.js           OK
    testing: site/index.html          OK
    testing: site/about.html          OK
    testing: site/.htaccess           OK
No errors detected in compressed data of site.zip.

Un zip dont la fin a été coupée par un transfert interrompu s'est terminé par [End-of-central-directory signature not found]. C'est le résultat du test avec -t d'un broken.zip ne gardant que les 2 000 premiers octets de site.zip, qui faisait 2 436 octets après la suppression des entrées logs avec -d.

unzip -t broken.zip
Archive:  broken.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of broken.zip or
        broken.zip.zip, and cannot find broken.zip.ZIP, period.

unzip lit d'abord la liste des fichiers placée tout à la fin du fichier zip (le central directory). C'est pourquoi il n'a même pas pu tester la première entrée de broken.zip, dont la fin était coupée.

Un fichier qui n'est pas un zip a donné le même message. site.tar.gz, regroupé avec tar, s'est terminé dans unzip par la même erreur ; un fichier tar.gz se décompresse avec la commande tar.

unzip site.tar.gz
Archive:  site.tar.gz
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of site.tar.gz or
        site.tar.gz.zip, and cannot find site.tar.gz.ZIP, period.

Un fichier zip créé sous Windows stocke parfois les noms de fichiers dans un encodage de caractères Windows au lieu d'UTF-8. En ouvrant avec unzip -l sur un serveur UTF-8 report-win.zip, dont les noms sont enregistrés en CP949, les noms de fichiers sont apparus sous forme de symboles illisibles.

unzip -l report-win.zip
Archive:  report-win.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       26  10-28-2026 22:10   ║╕░э╝н.txt
       17  10-28-2026 22:10   ░▀└√╝н.txt
---------                     -------
       43                     2 files

Si vous écrivez après -O l'encodage de caractères du Windows qui a créé le zip, les noms s'affichent correctement, et les fichiers décompressés avec la même option sont créés sous leur nom d'origine.

unzip -O CP949 -l report-win.zip
Archive:  report-win.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       26  10-28-2026 22:10   보고서.txt
       17  10-28-2026 22:10   견적서.txt
---------                     -------
       43                     2 files
unzip -O CP949 report-win.zip -d win
Archive:  report-win.zip
  inflating: win/보고서.txt
  inflating: win/견적서.txt

D'après l'aide d'unzip, -O est l'option pour les zip créés sous DOS ou Windows, et -I celle pour les zip créés sur d'autres systèmes.

Les messages d'erreur rencontrés pendant la décompression et ce qu'il faut vérifier ensuite sont listés ci-dessous.

SortieSignificationÀ vérifier ensuite
End-of-central-directory signature not foundLa liste des fichiers à la fin du zip est introuvable : le fichier est tronqué ou n'est pas un zipComparer la taille avec l'original et le télécharger de nouveau · tar.gz avec tar
cannot find or openAucun fichier de ce nom dans le dossier courantNom et emplacement du fichier avec ls
skipping: … incorrect passwordMot de passe faux trois fois, ce fichier a été ignoré (code de sortie 82)Majuscules et minuscules du mot de passe et langue de saisie
Noms de fichiers transformés en symbolesNoms enregistrés dans un encodage de caractères WindowsCet encodage (CP949, etc.) après -O

🔲 Simulateur de la commande zip

Dans le simulateur ci-dessous, vous pouvez saisir vous-même les étapes : compresser avec zip, puis lister ou décompresser avec unzip.

Simulateur de la commande zipZip 3.0 · UnZip 6.00
[root@server work]#
Il fonctionne uniquement dans le navigateur et ne compresse aucun vrai fichier. Les taux de compression sont des valeurs mesurées, et les fichiers créés dans le simulateur ont des valeurs estimées. ↑↓ rappelle les commandes déjà saisies.

🔢 FAQ & contenus recommandés

Un fichier .gz compressé avec gzip s'est terminé dans unzip par [End-of-central-directory signature not found]. Décompressé avec [gzip -d readme.txt.gz], readme.txt.gz est redevenu readme.txt. Un .tar.gz, obtenu en regroupant plusieurs fichiers avec tar puis en les compressant avec gzip, se décompresse en une fois avec tar.

Sur le serveur AlmaLinux 9 vérifié, zip et unzip étaient des commandes installées respectivement par les paquets zip et unzip. Sur les systèmes de la famille RHEL, installez-les donc avec [sudo dnf install zip unzip], et sur ceux de la famille Debian avec [sudo apt install zip unzip] (selon la liste officielle des paquets Debian).

Écrivez après unzip -p le fichier zip et le chemin qu'il contient, et le contenu s'affiche directement à l'écran. L'exécution de [unzip -p site.zip site/.htaccess] n'a affiché que les deux lignes de .htaccess, sans créer de fichier.

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

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

Prouvez que vous êtes humain : 4   +   9   =