Commande zip : compresser un dossier, décompresser avec unzip et options de compression
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
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.
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.zipArchive: 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 filesls -l site.zip-rw-r--r-- 1 root root 4158 Oct 28 23:05 site.zip2️⃣ Options de la commande zip
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 siteupdating: 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 $?12Pour 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.logLes 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 sitezip -qr level6.zip sitezip -qr -9 level9.zip sitels -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 compression | Taille du fichier zip | Par rapport au total d'origine |
|---|---|---|
| Total des fichiers d'origine | 35 875 octets | 100% |
| -0 (sans compression) | 37 433 octets | 104.3% |
| -6 (par défaut) | 4 179 octets | 11.6% |
| -9 (compression maximale) | 3 874 octets | 10.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.txtEnter 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.zipArchive: 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 decArchive: secret.zip
[secret.zip] memo.txt password:
extracting: dec/memo.txt📌 Options principales : résultats de cet article
| Option | Rôle | Résultat dans cet article | |
|---|---|---|---|
| zip -r | Met tous les sous-dossiers et fichiers du dossier | Sans -r, une ligne adding: site/ ; avec -r, dix entrées y compris .htaccess | |
| zip -x | Exclut les fichiers correspondant à un motif | Sans site/logs/*, seulement huit entrées, sans le dossier logs ni access.log | |
| zip -u | Remet uniquement les fichiers modifiés après la création du zip | Une ligne updating: site/index.html (deflated 90%) ; sans modification, aucune sortie et code de sortie 12 | |
| zip -d | Supprime des entrées dans le fichier zip | deleting: site/logs/ et deleting: site/logs/access.log | |
| zip -q | Masque les lignes affichées pendant la compression | Les trois commandes compressées avec -qr (-0, défaut, -9) se terminent sans ligne adding | |
| zip -0 | Stocke sans compresser | level0.zip fait 37433 octets, plus que le total d'origine | |
| zip -9 | Compresse au plus petit (défaut -6) | level9.zip 3874 octets ; level6.zip, créé avec la valeur par défaut, 4179 octets | |
| zip -e | Demande un mot de passe et chiffre le contenu | Demande Enter password: et Verify password:, puis adding: memo.txt (stored 0%) | |
| unzip -l | Affiche la liste des entrées stockées sans décompresser | site.zip avec 10 files, 35825 octets au total | |
| unzip -d | Indique le dossier de destination et le crée s'il n'existe pas | Commence par creating: restore/site/, et l'arborescence du dossier site est décompressée sous restore | |
| unzip -o | Écrase tous les fichiers existants sans demander | Cinq lignes inflating sans question | |
| unzip -n | Ignore les fichiers existants sans demander | Rien n'apparaît après la ligne Archive: site.zip | |
| unzip -t | Teste les données compressées sans décompresser | OK pour chaque entrée et No errors detected ; le broken.zip tronqué donne End-of-central-directory signature not found | |
| unzip -O | Indique l'encodage des caractères des noms de fichiers dans le zip | Avec -O CP949, les noms illisibles s'affichent comme 보고서.txt et 견적서.txt (« rapport » et « devis » en coréen) | |
| unzip -p | Envoie le contenu décompressé sur la sortie standard au lieu de créer des fichiers | Seules les deux lignes de .htaccess s'affichent, sans création de fichier |
📎 Autres options : selon le manuel officiel
| Option | Rôle | |
|---|---|---|
| zip -m | Supprime 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 -j | Stocke uniquement les noms de fichiers, sans les chemins de dossiers | |
| zip -y | Stocke un lien symbolique en tant que lien au lieu du fichier vers lequel il pointe | |
| zip -T | Teste le zip créé et laisse le zip d'origine inchangé si le test échoue | |
| zip -f | Remplace par les fichiers modifiés uniquement les entrées déjà présentes dans le zip, sans ajouter de nouveaux fichiers | |
| zip -i | Met 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 -j | Décompresse uniquement les fichiers dans un seul dossier, sans recréer l'arborescence du zip | |
| unzip -x | Indique les entrées à ne pas décompresser | |
| unzip -q | Masque les lignes affichées pendant la décompression | |
| unzip -u | Décompresse uniquement les fichiers absents du disque et ceux qui sont plus récents | |
| unzip -v | Ajoute à la liste la méthode de compression, la taille compressée, le taux et le CRC |
3️⃣ Utiliser la commande unzip
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 restoreArchive: 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/.htaccessSi 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 restoreArchive: site.zip
replace restore/site/css/style.css? [y]es, [n]o, [A]ll, [N]one, [r]ename: NPour 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 restoreArchive: 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/.htaccessunzip -n site.zip -d restoreArchive: site.zipEn 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 partArchive: site.zip
creating: part/site/css/
inflating: part/site/css/style.css4️⃣ Erreurs d'unzip
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.zipArchive: 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.zipArchive: 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.gzArchive: 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.zipArchive: report-win.zip
Length Date Time Name
--------- ---------- ----- ----
26 10-28-2026 22:10 ║╕░э╝н.txt
17 10-28-2026 22:10 ░▀└√╝н.txt
--------- -------
43 2 filesSi 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.zipArchive: report-win.zip
Length Date Time Name
--------- ---------- ----- ----
26 10-28-2026 22:10 보고서.txt
17 10-28-2026 22:10 견적서.txt
--------- -------
43 2 filesunzip -O CP949 report-win.zip -d winArchive: report-win.zip
inflating: win/보고서.txt
inflating: win/견적서.txtD'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.
| Sortie | Signification | À vérifier ensuite |
|---|---|---|
| End-of-central-directory signature not found | La liste des fichiers à la fin du zip est introuvable : le fichier est tronqué ou n'est pas un zip | Comparer la taille avec l'original et le télécharger de nouveau · tar.gz avec tar |
| cannot find or open | Aucun fichier de ce nom dans le dossier courant | Nom et emplacement du fichier avec ls |
| skipping: … incorrect password | Mot 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 symboles | Noms enregistrés dans un encodage de caractères Windows | Cet 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.
🔢 FAQ & contenus recommandés
WordPress · Extensions
Installer une extension WordPress : installation par la recherche, téléversement du ZIP et activation
Les étapes pour installer une extension depuis l'écran Ajouter des extensions, en cherchant dans le répertoire officiel ou en téléversant un fichier zip.
Rechercher
Commande Linux find
La commande find cherche des fichiers selon des critères comme le nom, l'extension, la taille et la date, puis enchaîne des actions sur les fichiers trouvés.
Gestion des fichiers
Options de la commande cp et écrasement en masse à l'exécution
Les options de la commande cp pour copier des fichiers et des répertoires, et comment copier en masse sans confirmation d'écrasement.
ℹ️ 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.