zip -r
Compresse récursivement un dossier et ses sous-dossiers.
Informatique
Les commandes zip et unzip suffisent pour la plupart des échanges d’archives sous Linux, mais elles doivent être utilisées avec une méthode simple : compresser depuis le bon dossier, exclure ce qui n’a rien à faire dans l’archive, lister le contenu, tester l’intégrité, puis extraire dans un emplacement maîtrisé. C’est cette suite qui évite l’archive vide, le dossier pollué, le fichier écrasé ou le livrable impossible à rouvrir quand le transfert devient urgent.
Pour compléter cette lecture, scp commande linux apporte des repères utiles sur commande scp linux pour transférer des fichiers en sécurité.
Un fichier ZIP paraît banal parce qu’il s’ouvre partout. En production, ce banal devient justement un risque : on l’envoie vite, on le récupère depuis Windows ou macOS, on le dépose dans un ticket, puis quelqu’un l’extrait au mauvais endroit. Le bon réflexe n’est pas d’apprendre toutes les options par cœur, mais de construire une procédure vérifiable.
La méthode fiable tient en cinq gestes, toujours dans le même ordre, pour éviter les erreurs sous pression réelle d’équipe.
Le premier contrôle consiste à vérifier que les commandes existent. Sur Debian, Ubuntu et leurs dérivées, les paquets s’installent avec apt. Sur Fedora, CentOS Stream ou RHEL, l’équivalent courant passe par dnf. L’important est surtout de documenter la commande utilisée dans votre procédure.
sudo apt update
sudo apt install zip unzip
command -v zip
command -v unzip
Ensuite, ne travaillez pas “depuis n’importe où”. Le dossier depuis lequel vous lancez la commande zip influence les chemins stockés dans l’archive. Une archive propre doit pouvoir s’extraire sans créer cinq niveaux inutiles ni mélanger plusieurs projets dans le même répertoire.
| Étape | Commande typique | Erreur évitée |
|---|---|---|
| Installer | sudo apt install zip unzip | Script qui échoue sur serveur minimal |
| Créer | zip -r archive.zip dossier/ | Dossier incomplet ou fichiers oubliés |
| Lister | unzip -l archive.zip | Chemins surprises ou archive vide |
| Tester | unzip -t archive.zip | Archive corrompue transmise trop vite |
| Extraire | unzip archive.zip -d destination/ | Extraction dans le mauvais dossier |
Cette table peut servir de mini-procédure. Elle est volontairement simple, parce qu’un runbook utile doit rester exécutable sous pression.
La commande de base doit rester lisible, même quand elle paraît évidente. Elle doit pouvoir être relue par quelqu’un d’autre.
Placez le nom de l’archive avant les fichiers à inclure. Même si certains usages ajoutent l’extension automatiquement, écrivez toujours .zip explicitement : le nom devient lisible pour l’équipe, les scripts et la personne qui reçoit le fichier.
zip documents.zip rapport.pdf devis.xlsx notes.txt
Pour un ensemble de fichiers du même type, un motif shell suffit. Ici, seuls les PDF présents dans le dossier courant sont ajoutés. Le motif est développé par le shell avant l’appel à zip, ce qui explique pourquoi le résultat dépend du répertoire courant.
zip pdf-client.zip *.pdf
Après création, listez le contenu. Ce contrôle prend quelques secondes et révèle immédiatement une archive vide, un mauvais chemin, ou un fichier manquant. Dans un échange avec un client, c’est souvent le contrôle qui évite un aller-retour inutile.
unzip -l documents.zip
Ne confondez pas compression et sauvegarde. Une archive ZIP facilite le transport, mais elle ne remplace pas une sauvegarde versionnée, contrôlée et stockée ailleurs. Pour un livrable ponctuel, elle est pratique. Pour un plan de reprise, elle doit seulement être une brique parmi d’autres.
La plupart des cas utiles se règlent avec quelques options stables.
Compresse récursivement un dossier et ses sous-dossiers.
Exclut des fichiers ou dossiers selon des motifs.
Ajuste le niveau de compression, de stockage simple à compression maximale.
Liste le contenu sans extraire les fichiers.
Teste l’intégrité de l’archive avant utilisation.
Extrait dans un dossier cible précis.
Un dossier ne se compresse pas comme une poignée de fichiers isolés. La récursion change tout.
La plupart des erreurs arrivent au moment de compresser une arborescence. Sans récursion, vous risquez d’obtenir une archive qui ne contient pas ce que l’équipe attend. L’option clé est -r, qui descend dans les sous-dossiers.
zip -r projet-web.zip projet-web/
Pour éviter les chemins trop longs, placez-vous au bon niveau avant de compresser. Si le site à livrer est dans /var/www/site-client, vous pouvez vous positionner dans /var/www et archiver le dossier directement. L’archive contiendra alors un dossier racine propre.
Pour approfondir ce point, consultez NFS Linux, qui traite plus précisément de nfs sous linux, le guide clair pour partager des fichiers sans piège.
cd /var/www
zip -r site-client.zip site-client/
Cette discipline paraît mineure, mais elle compte beaucoup lorsqu’une autre personne doit extraire l’archive. Un ZIP qui contient un dossier clair se restaure plus facilement qu’une archive qui déverse des fichiers à plat dans le répertoire courant.
Avant de transmettre, relisez la liste. Vous devez voir les bons dossiers, pas le chemin complet de votre machine ni une arborescence accidentelle. C’est un contrôle simple, mais il donne une preuve terrain.
Une bonne archive ne contient pas tout le dossier de travail ; elle contient ce que le destinataire doit vraiment utiliser.
Un dossier de projet contient souvent des fichiers qu’il ne faut pas embarquer : caches, journaux, dépendances installées localement, exports temporaires, sauvegardes anciennes ou dossiers Git. Les inclure rend l’archive plus lourde et peut exposer des informations inutiles.
L’option -x exclut des motifs. Les guillemets empêchent le shell de développer trop tôt certains motifs. Pour un projet web ou Node, la commande peut par exemple ignorer les dépendances, le dépôt Git et les logs.
zip -r projet.zip projet/ -x "*/node_modules/*" "*/.git/*" "*.log" "*.tmp"
Pour un site, adaptez la liste aux dossiers réellement présents. Un cache local, un fichier .old ou une sauvegarde .bak n’a pas forcément sa place dans un livrable. Le but n’est pas de tout exclure, mais de supprimer le bruit opérationnel.
zip -r site.zip site/ -x "*/cache/*" "*.bak" "*.old"
Contrôlez ensuite le résultat. Si node_modules, .git ou cache apparaissent encore, l’exclusion ne correspond pas à votre arborescence. Ajustez le motif, puis recréez l’archive au lieu de corriger “mentalement” le problème.
unzip -l projet.zip | head -n 40
Le niveau maximal n’est pas automatiquement le meilleur choix. Il faut arbitrer temps, taille et charge CPU.
La commande zip accepte des niveaux de compression de -0 à -9. Le niveau -0 stocke sans compresser, tandis que -9 cherche le meilleur taux de compression. En pratique, le bon choix dépend des fichiers et du temps disponible.
zip -1 archive-rapide.zip gros-dossier/
zip -9 archive-compacte.zip gros-dossier/
Les fichiers texte, CSV, logs et sources se compressent bien ; les médias déjà optimisés beaucoup moins, surtout en production.
Pour une tâche récurrente, testez sur un échantillon réel. Comparez durée, taille finale et charge machine, puis fixez un niveau stable dans la procédure. Le meilleur niveau n’est pas toujours le plus élevé : c’est celui qui respecte la fenêtre de sauvegarde et la contrainte de stockage.
ZIP est universel, mais il n’est pas toujours le meilleur format pour un parc Linux.
Échange multi-plateforme
Pratique quand l’archive doit être ouverte facilement sous Windows, macOS et Linux.
Sauvegarde Linux classique
Souvent plus naturel pour conserver une arborescence Unix/Linux dans un flux d’exploitation.
Compression plus forte
Utile quand la taille prime, mais moins universel dans certaines organisations.
Données sensibles
Préférable quand le vrai sujet est le chiffrement et la gestion du secret.
L’option -e demande un mot de passe pendant la création de l’archive. C’est préférable à une commande qui expose le secret dans l’historique du shell, mais cela ne transforme pas un ZIP en coffre-fort. Utilisez cette option pour des échanges simples et non critiques, puis documentez clairement comment le mot de passe est transmis, à qui et pendant combien de temps il reste valable. La sécurité ne tient pas dans une option isolée.
zip -e documents-confidentiels.zip contrat.pdf annexe.pdf
Restez prudent. Une archive ZIP protégée ne remplace pas une politique de chiffrement sérieuse. Pour des données sensibles, utilisez un mot de passe long, transmis par un canal séparé, et évitez de déposer l’archive dans un espace partagé non maîtrisé. Si l’enjeu est élevé, préférez une solution dédiée : chiffrement robuste, contrôle d’accès, rotation et journalisation.
Le risque le plus courant n’est pas seulement technique. Il est organisationnel : mot de passe envoyé dans le même mail, fichier laissé dans un dossier public, archive copiée sur un poste non maîtrisé. Dans ce cas, le bon outil ne corrige pas une mauvaise procédure.
Avant d’extraire une archive reçue, commencez par la lister. Ce geste permet de repérer les fichiers nombreux, les noms suspects, les chemins inattendus ou une archive qui va polluer le dossier courant.
Pour approfondir ce point, consultez Maîtriser l’utilisation des variables d’environnement sous Linux, qui traite plus précisément de maîtriser l’utilisation des variables d’environnement sous linux : guide pratique et astuces.
unzip -l archive.zip
Ensuite, extrayez dans un dossier cible. Cette méthode est plus sûre que l’extraction directe, surtout si vous ne savez pas encore si l’archive contient un dossier racine unique.
mkdir -p /tmp/archive-test
unzip archive.zip -d /tmp/archive-test
Pour extraire un seul fichier, indiquez son chemin exact tel qu’il apparaît dans la liste. C’est utile pour récupérer une configuration sans restaurer tout le paquet.
unzip archive.zip projet/config/app.conf -d ./restauration
Quand des fichiers existent déjà, évitez les comportements implicites. En usage manuel, unzip peut demander s’il faut remplacer, ignorer ou renommer. Dans un script, cette question peut bloquer l’exécution. Choisissez une stratégie d’écrasement avant de lancer la commande.
unzip -n archive.zip -d destination/
unzip -o archive.zip -d destination/
-n n’écrase pas les fichiers existants. -o écrase sans demander. La première option est plus prudente ; la seconde doit rester réservée aux cas où la cible est connue, sauvegardée et volontairement remplaçable.
L’option unzip -t teste l’intégrité d’une archive sans extraire les fichiers. Utilisez-la après création, après transfert et avant restauration. Un ZIP peut être incomplet, corrompu ou tronqué par un téléchargement interrompu.
unzip -t archive.zip
Ce test ne prouve pas que le contenu est métierement correct. Il prouve que l’archive peut être lue. Pour un livrable ou une sauvegarde, ajoutez un contrôle fonctionnel : présence du fichier attendu, taille cohérente, nombre de fichiers, date de génération, ou réouverture dans une machine de test.
C’est ici que beaucoup de procédures deviennent solides. Elles ne se contentent pas d’afficher “archive créée”. Elles vérifient la lisibilité de l’archive, puis elles échouent clairement si le contrôle ne passe pas.
Les images ci-dessous illustrent les deux cas où la méthode évite le plus d’incidents : exclure proprement et automatiser sans interaction.
Excluez caches, logs et dépendances locales avant compression. Le destinataire doit recevoir le nécessaire, pas le bruit de votre poste.
Testez l’archive dans le script et écrivez le fichier dans un dossier prévu. Une archive non vérifiée n’est pas une preuve de sauvegarde.
Un script doit être plus strict qu’une commande manuelle. Il doit échouer proprement, produire un nom explicite, exclure les fichiers inutiles et tester l’archive avant de la considérer comme valide.
#!/usr/bin/env bash
set -euo pipefail
archive="export-$(date +%F).zip"
source_dir="./exports"
destination="./archives"
mkdir -p "$destination"
zip -r "$destination/$archive" "$source_dir" -x "*.tmp" "*.log"
unzip -t "$destination/$archive"
Ce script reste volontairement court. Il montre les points importants : nom daté, dossier de sortie, exclusions et test d’intégrité. Dans un environnement plus critique, ajoutez la rotation, les logs, l’espace disque disponible, l’alerte en cas d’échec et le transfert vers un stockage distinct.
Évitez d’écrire un mot de passe dans un script ou dans une ligne de commande visible. Si un secret est nécessaire, traitez-le comme un secret d’exploitation : gestionnaire dédié, variable protégée, canal contrôlé. Un script pratique mais bavard peut devenir une fuite de sécurité.
Quand zip ou unzip ne produit pas le résultat attendu, revenez aux causes simples. La commande est-elle installée ? Êtes-vous dans le bon dossier ? Le motif d’exclusion est-il évalué par le shell ? L’archive contient-elle bien les chemins attendus ? Le dossier cible existe-t-il ?
Voici les vérifications qui règlent la plupart des cas. Gardez-les sous les yeux avant d’accuser l’archive elle-même :
pwd avant la compression pour confirmer le dossier courant ;unzip -l archive.zip pour voir ce qui est réellement stocké ;unzip -t archive.zip avant d’envoyer ou restaurer ;-o sans sauvegarde préalable ;Un autre problème vient des fichiers cachés et des chemins. Selon le motif utilisé, vous pouvez oublier un fichier commençant par un point, ou au contraire embarquer un dossier .git complet. La liste de l’archive reste votre juge de paix. Elle montre le résultat réel, pas l’intention, et elle donne à une autre personne la possibilité de vérifier votre livrable sans connaître votre machine.
Si l’archive est très volumineuse, contrôlez aussi l’espace disque. La création d’un ZIP peut nécessiter assez de place pour la source et l’archive finale. L’extraction, elle, peut échouer si le volume cible est saturé. Le message d’erreur n’est pas toujours élégant, mais la cause est souvent simplement un manque d’espace.
À appliquer dès qu’une archive sort d’un poste ou entre dans un environnement partagé.
Zip et unzip sont des commandes simples. La qualité vient donc moins de la syntaxe que de la procédure autour : où vous lancez la commande, ce que vous excluez, comment vous contrôlez, et où vous extrayez. Une archive fiable est une archive que l’on peut expliquer et rejouer.
Pour un usage quotidien, retenez une règle stable : créer, vérifier, tester, extraire dans un espace maîtrisé, toujours.
Pour approfondir ce point, consultez Bien gérer sources.list sous Debian sans casser, qui traite plus précisément de bien gérer sources.list sous debian sans casser apt.
Ces pages officielles ou de distribution documentent les options citées et la disponibilité des paquets.
À lire aussi