Linux / Commande zip : créer une archive, exclure des fichiers et la vérifier

zip rassemble plusieurs fichiers dans une archive ZIP et peut les compresser. Utilisez -r pour inclure le contenu des répertoires, puis unzip -l pour consulter la liste et unzip -t pour tester les données. Choisissez un nom d’archive neuf si vous voulez un paquet neuf : relancer zip sur une archive existante ajoute ou remplace des entrées sans nécessairement retirer les anciennes.

Préparer les fichiers et créer une première archive

Les exemples concernent Info-ZIP zip et son programme compagnon unzip. Vérifiez zip -v, unzip -v et les pages man zip et man unzip de votre installation. Le premier nom après les options est l’archive, les suivants sont les chemins à inclure :

zip [OPTIONS] ARCHIVE.zip FICHIER_OU_REPERTOIRE ...

Pour suivre un exemple complet dans Bash, préparez un nouveau dossier avec deux textes et un sous-dossier. Continuez uniquement si chaque étape réussit :

demo=$(mktemp -d) &&
cd "$demo" &&
mkdir -p project/sub restore &&
printf 'hello\n' > project/report.txt &&
printf 'notes\n' > project/sub/notes.txt &&
printf 'temporary\n' > project/cache.tmp &&
printf 'Repertoire de travail : %s\n' "$demo"

Gardez le chemin affiché et restez dans le même terminal. Une archive de deux fichiers explicitement nommés peut être créée ainsi :

zip documents.zip project/report.txt project/sub/notes.txt

Les sources restent disponibles. Les chemins enregistrés incluent project/ ; l’archive sera interprétée avec ces chemins à l’extraction. Une commande réussie affiche habituellement les éléments ajoutés et leur mode de stockage ; le taux exact dépend des données. -q masque les messages d’information, mais ne transforme pas une erreur en succès.

Inclure une arborescence et exclure des fichiers

zip -r project.zip project/ -x '*.tmp'
unzip -Z -1 project.zip

-r parcourt project/ et ses sous-dossiers. Sans cette option, nommer seulement le répertoire ne suffit pas à inclure tous ses descendants. Dans Info-ZIP, ce parcours inclut aussi les noms commençant par un point ; un motif développé par le shell comme project/* peut avoir un comportement différent.

Les apostrophes autour de '*.tmp' empêchent le shell de développer le motif avant que zip le reçoive. Le motif est comparé par zip aux chemins concernés et exclut ici project/cache.tmp. La liste doit contenir project/report.txt et project/sub/notes.txt, ainsi que d’éventuelles entrées de répertoires ; cache.tmp ne doit pas y figurer. L’ordre des lignes peut varier.

Placez l’archive de sortie en dehors du dossier source pour garder une séparation claire entre les documents et leur paquet. Avant un vrai envoi, examinez aussi les fichiers cachés ou les informations de configuration que le parcours peut inclure. Une exclusion n’est utile que si vous vérifiez la liste produite.

Tester puis restaurer dans un dossier vide

unzip -l project.zip
unzip -t project.zip

-l affiche l’inventaire et des tailles ; il ne vérifie pas à lui seul les données de chaque entrée. -t décompresse les entrées en mémoire pour vérifier leur contrôle d’intégrité sans écrire les fichiers extraits. Lisez le bilan et le code de sortie : la seule existence de project.zip n’assure pas que tous les fichiers attendus ont été lus et ajoutés.

Le dossier restore créé au début est encore vide. Pour l’archive que vous venez de produire vous-même :

unzip project.zip -d restore/ &&
cmp project/report.txt restore/project/report.txt &&
cmp project/sub/notes.txt restore/project/sub/notes.txt &&
printf 'Fichiers restaures identiques\n'

Les chemins stockés expliquent la présence de restore/project/, et non de restore/report.txt directement. cmp ne produit normalement rien et renvoie 0 si les octets sont identiques ; le message final dépend du succès de l’extraction et des deux comparaisons. Pour une archive reçue, inspectez les chemins et le type des entrées avant extraction, avec des droits limités et une destination adaptée à son niveau de confiance.

Comprendre une mise à jour et les options courantes

Si documents.zip existe, une nouvelle commande zip documents.zip project/report.txt remplace l’entrée du même nom et laisse les autres entrées intactes. Un fichier qui n’est plus fourni ne disparaît donc pas automatiquement de l’archive. Pour un paquet correspondant exactement à une nouvelle sélection, utilisez un nouveau nom et inspectez le résultat.

Option Effet et condition
-r Parcourir les répertoires récursivement.
-0 Stocker sans compression ajoutée.
-1 à -9 Régler l’effort de compression Deflate ; le défaut est -6.
-u Mettre à jour les entrées dont la source est plus récente et ajouter de nouveaux noms.
-x motif Exclure les chemins correspondant au motif ; protéger le motif du shell.
-q Réduire les messages d’information.

-u se fonde notamment sur les dates, pas sur une comparaison exhaustive du contenu. Il n’est pas une synchronisation qui supprime les entrées devenues absentes. D’autres options peuvent retirer des entrées ou déplacer les sources ; ne les ajoutez pas sans examiner leur effet. Les modes de mise à jour et les règles de motifs sont décrits dans le manuel Info-ZIP fourni par Ubuntu 26.04 LTS.

La compatibilité dépend aussi du programme destinataire, des méthodes de compression, des grands fichiers et de l’encodage des noms. Testez les caractères accentués et les fichiers importants avec l’outil prévu pour l’extraction. Les permissions, propriétaires et autres métadonnées ne sont pas forcément restitués de la même façon entre plateformes ; une comparaison d’octets ne vérifie pas tout cela.

Enfin, les options de mot de passe traditionnelles d’Info-ZIP ne doivent pas être assimilées à une protection forte. Un mot de passe passé dans la ligne de commande peut aussi être exposé. Pour des informations confidentielles, choisissez une méthode de chiffrement adaptée à vos besoins et à ceux du destinataire, plutôt que de supposer qu’une extension .zip suffit.