Comment compresser ou décompresser des fichiers à partir du terminal Linux



Les archives ZIP représentent un format de compression largement répandu, compatible avec divers systèmes d’exploitation tels que Windows, macOS et Linux. Sur Linux, il est possible de créer ou d’extraire des fichiers ZIP en utilisant certaines commandes directement dans le terminal.

Le format d’archive compressé ZIP

Le format ZIP est omniprésent, particulièrement dans l’environnement Windows, ce qui en fait sans doute le format d’archive compressée le plus utilisé à l’échelle mondiale.

Bien que les formats .tar.gz et tar.bz2 soient courants sur Linux, les utilisateurs de Windows vous enverront le plus souvent des archives ZIP. De même, si vous devez archiver des fichiers pour les partager avec un utilisateur Windows, le format ZIP demeure l’option la plus simple et la plus universellement compatible.

zip, unzip et autres outils connexes

Les systèmes d’exploitation de type Linux et Unix, comme macOS, offrent des outils intégrés pour la manipulation des fichiers ZIP, nommés `zip` et `unzip`. En outre, il existe une gamme d’utilitaires associés, tels que `zipcloak`, `zipdetails`, `zipsplit` et `zipinfo`.

Nous avons analysé plusieurs distributions Linux pour déterminer si ces utilitaires étaient inclus par défaut. Dans Ubuntu 19.04, 18.10 et 18.04, ils étaient tous présents. Manjaro 18.04 les incluait également. Fedora 29 et CentOS, en revanche, ne proposaient que `zip` et `unzip`, excluant les autres outils.

Pour installer les outils manquants sur Fedora 29, utilisez la commande suivante :

sudo dnf install perl-IO-Compress

Pour installer les outils manquants sur CentOS 7, utilisez la commande suivante :

sudo yum install perl-IO-Compress

Si un utilitaire ZIP est manquant dans une distribution Linux non mentionnée précédemment, utilisez le gestionnaire de paquets de cette distribution pour installer le paquet nécessaire.

Création d’un fichier ZIP avec la commande zip

Pour créer une archive ZIP, vous devez indiquer à la commande `zip` le nom du fichier d’archive et les fichiers à inclure. L’extension « .zip » n’est pas obligatoire, mais il est préférable de l’ajouter pour une meilleure clarté.

Pour créer un fichier nommé `code_source.zip` contenant tous les fichiers de code source C et les fichiers d’en-tête du répertoire actuel, utilisez la commande suivante:

zip source_code *.c *.h

Chaque fichier est listé au fur et à mesure de son ajout à l’archive, affichant son nom et le taux de compression obtenu.

Si vous examinez la nouvelle archive ZIP, vous remarquerez que l’extension « .zip » a été ajoutée automatiquement par la commande `zip`.

ls -l source_code.zip

Pour masquer les messages de la commande `zip` pendant la création de l’archive, utilisez l’option `-q` (silencieux).

zip -q source_code *.c *.h

Inclusion de répertoires dans les fichiers ZIP

Pour inclure des sous-répertoires dans l’archive ZIP, utilisez l’option `-r` (récursive) en spécifiant également le nom du sous-répertoire dans la ligne de commande. Pour reproduire l’exemple précédent en y ajoutant le sous-répertoire `archive`, utilisez la commande ci-dessous.

zip -r -q source_code archive/ *.c *.h

Il est conseillé de structurer les archives ZIP en incluant les fichiers dans un répertoire pour faciliter la gestion des fichiers par la personne qui extraira l’archive. Ainsi, tous les fichiers extraits seront placés dans un dossier spécifique sur leur ordinateur.

La commande suivante permet d’archiver le répertoire de travail et tous ses sous-répertoires. Cette commande est exécutée depuis le répertoire parent du dossier de travail.

zip -r -q source_code work/

Ajustement du niveau de compression

Il est possible de paramétrer le degré de compression appliqué aux fichiers lors de leur ajout à l’archive ZIP. La plage s’étend de 0 à 9, où 0 indique l’absence de compression. Plus le niveau de compression est élevé, plus la création du fichier ZIP prendra de temps. Pour des archives ZIP de taille modeste, cette différence de temps n’est généralement pas significative. En outre, pour les archives de petite taille, le niveau de compression par défaut (niveau 6) est souvent suffisant.

Pour spécifier un niveau de compression, utilisez l’option « – » suivie du niveau désiré, comme suit :

zip -0 -r -q source_code work/

Le niveau de compression par défaut est 6. Bien que l’option `-6` ne soit pas nécessaire, elle peut être utilisée sans inconvénient.

zip -r -q source_code work/

Le niveau de compression maximal est 9.

zip -9 -r -q source_code work/

Dans le cas des fichiers et répertoires archivés dans cet exemple, la différence de taille entre l’absence de compression (niveau 0) et la compression par défaut (niveau 6) est de 400 Ko. La différence entre la compression par défaut et la compression maximale (niveau 9) est de seulement 4 Ko.

Bien que cela puisse sembler minime, pour des archives contenant des centaines voire des milliers de fichiers, le gain de compression supplémentaire par fichier peut représenter une économie d’espace significative.

Ajout de mots de passe aux fichiers ZIP

L’ajout d’un mot de passe aux fichiers ZIP est simple. Utilisez l’option `-e` (chiffrer) et vous serez invité à saisir votre mot de passe, puis à le ressaisir pour vérification.

zip -e -r -q source_code work/

Extraction d’un fichier ZIP avec la commande unzip

Pour extraire les fichiers d’une archive ZIP, utilisez la commande `unzip` suivie du nom du fichier ZIP. N’oubliez pas d’inclure l’extension « .zip ».

unzip source_code.zip

Au fur et à mesure que les fichiers sont extraits, ils sont listés dans la fenêtre du terminal.

Les fichiers ZIP ne contiennent pas d’informations concernant la propriété des fichiers. Tous les fichiers extraits auront comme propriétaire l’utilisateur qui effectue l’extraction.

Comme pour `zip`, la commande `unzip` possède une option `-q` (silencieux), qui permet de masquer la liste des fichiers pendant l’extraction.

unzip -q source_code.zip

Extraction des fichiers dans un répertoire spécifique

Pour extraire les fichiers dans un répertoire précis, utilisez l’option `-d` (répertoire) suivie du chemin d’accès au répertoire cible.

unzip -q source_code.zip -d ./development

Extraction de fichiers ZIP protégés par mot de passe

Si un fichier ZIP a été créé avec un mot de passe, `unzip` vous demandera de le saisir. Si vous ne fournissez pas le bon mot de passe, `unzip` ne procédera pas à l’extraction des fichiers.

unzip -q source_code.zip

Si la divulgation du mot de passe ne vous pose pas de problème et que vous n’êtes pas préoccupé par son enregistrement dans l’historique de vos commandes, vous pouvez spécifier le mot de passe directement dans la ligne de commande grâce à l’option `-P` (mot de passe). Notez que l’option « -P » utilise un « P » majuscule.

unzip -P fifty.treacle.cutlass -q source_code.zip

Exclusion de fichiers

Si vous ne souhaitez pas extraire un ou plusieurs fichiers spécifiques, utilisez l’option `-x` (exclure). Dans l’exemple qui suit, nous voulons extraire tous les fichiers sauf ceux ayant l’extension « .h ».

unzip -q source_code.zip -x *.h

Remplacement de fichiers

Supposons que vous ayez déjà extrait une archive et que, par erreur, vous ayez supprimé certains des fichiers extraits.

Une solution rapide serait d’extraire à nouveau les fichiers. Toutefois, si vous tentez d’extraire l’archive ZIP dans le même répertoire, `unzip` vous demandera si vous souhaitez remplacer les fichiers existants. Il attendra l’une des réponses suivantes.

Hormis la réponse `r` (renommer), ces réponses sont sensibles à la casse.

y: Oui, remplacer ce fichier
n: Non, ne pas remplacer ce fichier
R: Tous, remplacer tous les fichiers
N: Aucun, ne remplacer aucun fichier
r: Renommer, extraire le fichier en lui attribuant un nouveau nom. Vous serez invité à saisir le nouveau nom.

Pour forcer `unzip` à remplacer tous les fichiers existants, utilisez l’option `-o` (remplacer).

unzip -o -q source_code.zip

La méthode la plus efficace pour remplacer les fichiers manquants est de demander à `unzip` d’extraire uniquement les fichiers de l’archive qui ne sont pas présents dans le répertoire cible. Pour cela, utilisez l’option `-n` (ne jamais remplacer).

unzip -n source_code.zip

Visualisation du contenu d’un fichier ZIP

Il est souvent utile d’afficher la liste des fichiers contenus dans une archive ZIP avant de les extraire. Vous pouvez utiliser pour cela l’option `-l` (liste de l’archive). Il est recommandé de rediriger la sortie vers `less` pour une meilleure gestion de l’affichage.

unzip -l source_code.zip | less

La sortie affiche les répertoires et fichiers contenus dans l’archive ZIP, leur taille, ainsi que la date et l’heure de leur ajout à l’archive. Appuyez sur « q » pour quitter `less`.

Il existe d’autres méthodes pour examiner le contenu d’une archive ZIP qui offrent différents types d’informations, comme nous allons le voir.

Ajout d’un mot de passe avec la commande zipcloak

Si vous avez créé un fichier ZIP et que vous avez oublié d’ajouter un mot de passe, pas de panique ! Vous pouvez ajouter rapidement un mot de passe à l’aide de la commande `zipcloak`. Saisissez le nom du fichier ZIP dans la ligne de commande. Vous serez invité à entrer un mot de passe et à le ressaisir pour confirmation.

zipcloak source_code.zip

Affichage détaillé des fichiers avec la commande zipdetails

La commande `zipdetails` affiche de nombreuses informations concernant le fichier ZIP. La seule manière raisonnable de gérer la quantité de données affichées par cette commande est de la rediriger vers `less`.

zipdetails source_code.zip | less

Notez que les informations incluent les noms de fichiers, même si le fichier ZIP est protégé par un mot de passe. Ce type d’informations est stocké dans le fichier ZIP en tant que métadonnées et ne fait pas partie des données chiffrées.

Recherche dans les fichiers avec la commande zipgrep

La commande `zipgrep` permet de rechercher du texte à l’intérieur des fichiers d’une archive ZIP. Dans l’exemple qui suit, nous souhaitons identifier les fichiers de l’archive ZIP qui contiennent le texte « keyval.h ».

zipgrep keyval.h source_code.zip

Nous constatons que les fichiers `slang.c` et `getval.c` contiennent la chaîne « keyval.h ». Nous pouvons également voir qu’il existe deux copies de chacun de ces fichiers dans des répertoires différents de l’archive ZIP.

Affichage d’informations avec la commande zipinfo

La commande `zipinfo` offre une autre approche pour examiner le contenu d’une archive ZIP. Comme précédemment, nous redirigeons la sortie vers `less` pour une meilleure lisibilité.

zipinfo source_code.zip | less

De gauche à droite, la sortie affiche :

Les permissions de fichiers
La version de l’outil utilisé pour créer le fichier ZIP
La taille du fichier d’origine
Un descripteur de fichier (décrit ci-dessous)
La méthode de compression (dégonflage, dans ce cas)
Les données et l’horodatage
Le nom du fichier et son éventuel répertoire

Le descripteur de fichier est constitué de deux caractères. Le premier caractère est « t » pour un fichier texte ou « b » pour un fichier binaire. S’il est en majuscule, le fichier est chiffré. Le second caractère peut prendre l’une des quatre valeurs. Ce caractère représente le type de métadonnées inclues pour ce fichier : aucune, un en-tête local étendu, un « champ supplémentaire », ou les deux.

– : si ni l’un ni l’autre n’existe, le caractère est un tiret
l : s’il existe un en-tête local étendu, mais pas de champ supplémentaire
x : s’il n’existe pas d’en-tête local étendu, mais un champ supplémentaire
X : si un en-tête local étendu et un champ supplémentaire existent

<img decoding= »async » loading= »lazy » class= »alignnone size-full wp-image-414555″ src= »https://toptips.fr/wp-content/uploads/2020/12/1609432216_533_Comment-compresser-ou-decompresser-des-fichiers-a-partir-du-terminal.png » alt= »sortie zipinfo dans une fenêtre de terminal » width= »644″ height= »380″ onload= »pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this); » onerror= »this.onerror=null;pagespeed.lazyLoadImages.load