Comment compresser / décompresser sur la ligne de commande unix?

540

Comment créer et extraire des archives zip à partir de la ligne de commande?

Joachim
la source
3
@joachim, vous devriez poser la question dans une question et fournir une réponse dans une réponse. Il n’ya pas de problème à répondre à vos propres questions, mais pas dans le cadre de la question elle-même, car cela annule l’avantage de l’objectif SO de la communauté sur la meilleure réponse. En outre, cela convient probablement mieux aux super-utilisateurs car ce n’est pas lié à la programmation.
2
Où allez-vous documenter comment vous connecter et vérifier SO si vous oubliez votre identifiant?
@ rlb.usa: Je travaille dans beaucoup d'endroits différents, sur beaucoup de serveurs différents. Utiliser SA pour une note comme celle-ci aide aussi les autres, comme je le vois.
Joachim

Réponses:

663

Généralement , on utilise tarpour créer une archive non compressée et soit gzipou bzip2pour compresser cette archive. Les commandes gunzipet correspondantes bunzip2peuvent être utilisées pour décompresser ladite archive, ou vous pouvez simplement utiliser des indicateurs sur la tarcommande pour effectuer la décompression.

Si vous faites spécifiquement référence au format de fichier Zip , vous pouvez simplement utiliser les commandes zipet unzip.

Pour compresser:

zip squash.zip file1 file2 file3

ou compresser un répertoire

zip -r squash.zip dir1

Pour décompresser:

unzip squash.zip

cela le décompresse dans votre répertoire de travail actuel.

Justin Ethier
la source
72
Personnellement, je n’utilise que la zip -r9 archive.zip files...syntaxe (-r = récursive -9 = compression maximale).
Amphetamachine
3
Remarque: vous zippouvez créer de nombreuses versions différentes d’archives .ZIP et utiliser de nombreux compresseurs. D'autre part, il existe un certain nombre d'autres outils de compression portant le même nom: 7-Zip, gzip, bzip2, rzip, etc. qui ne sont pas interchangeables.
polemon
5
Si vous ne voulez pas que le répertoire parent soit inclus:cd dir1; zip -r ../squash.zip *
Marinos An
Je suis confus, je l'ai fait et j'ai une longue liste d'inflation et d'extractions, mais quand je vérifie le répertoire, il est vide, sauf pour le fichier zip d'origine? Où est-ce que tout va?
Développeur d'été
11
Pour l'enregistrement, utilisez unzip -d myfolder squash.zippour extraire dans un nouveau répertoire distinct ( myfolder) au lieu de placer tous les fichiers directement dans le répertoire en cours, ce qui peut être gênant si le fichier zip contient de nombreux fichiers et répertoires à son niveau supérieur. Cela imite le fonctionnement de la plupart des outils de décompression de l'interface utilisateur.
Alexander Klimetschek
64

Il existe un très grand nombre de façons différentes de compresser et de décompresser sous des dérivés UNIX, je suppose donc que vous vouliez dire «zip» au sens générique plutôt que sous un format de fichier spécifique .

Vous pouvez compresser des fichiers (au format compressé) avec le tarprogramme GNU :

tar -zcvf myfile.tgz .

qui fera le répertoire courant. Remplacez-le .par d'autres noms de fichiers si vous voulez autre chose.

Pour décompresser ce fichier, utilisez:

tar -zxvf myfile.tgz

En supposant que vous disposiez d’une tarcapacité suffisante pour la compression et la combinaison de fichiers.

Sinon, vous pouvez simplement utiliser tar cvfsuivi de gzip(encore une fois, si disponible) pour la compression et gunzipsuivi de tar xvf.


Pour un traitement spécifique des fichiers au format ZIP, je vous recommande de télécharger 7zipet d’utiliser ce dernier - il reconnaît une grande variété de formats de fichiers, y compris le fichier ZIP.


la source
Ou utilisez tar jcvf file.tar.bz2...pour compresser au format bzip2 ou tar Jcvf file.tar.xz ...pour la compression xz.
OldTimer
4
J'ai voté contre votre réponse parce que la question porte sur la façon de traiter les archives zip et non les fichiers tar.
Étoile de mer
3
@ Starfish, c'est certainement dans vos droits, merci d'avoir au moins expliqué pourquoi, tant de gens ne prennent pas le temps de le faire :-) J'ai pris "zip" au sens plus générique (compression) plutôt qu'un format spécifique, alors je vais le rendre plus clair.
Sachez que les archives tar risquent de ne pas fonctionner correctement lorsque vous vous déplacez entre différentes plates-formes, de mac en linux ou inversement. Le zip est beaucoup plus sûr, car il fonctionne correctement sur tous les systèmes.
user1751825
Je suppose que techniquement c'est gzip, donc ça va. Je suppose. De toute évidence pas ce que la question demandait bien.
Hibou
30

Si les packages zip et unzip ne sont pas installés et que vous avez java, vous pouvez utiliser jarpour décompresser:

jar -xf file.zip
mlocke
la source
3
Pas mon serveur, pas de décompression, zip, 7z, rien ... Et cela a fonctionné. Merci!
Dariusz
2
C'est un bon conseil.
Étoile de mer
29

Eh bien, en ce qui concerne la distribution de fichiers pour divers systèmes d'exploitation, je recommanderais 7-zip .

En général , dans le paquet p7zip, vous aurez la 7zet 7zacommande, avec laquelle vous pouvez créer vos propres archives 7z.

7zapeut également décompresser des archives zip standard ( pkzip ) (et les créer également avec le -tzipcommutateur).

Compression:

7za a archive.7z file1 file2 directory/

Décompressant:

7za x archive.7z

Il peut également créer des archives auto-extractibles avec le -sfxcommutateur:

7za a -sfx archive.exe files1 file2 dir

Je recommande cette méthode au cas où les utilisateurs de Windows ne pourraient pas ouvrir les archives 7z (au cas où vous voudriez conseiller un outil pour cela: PeaZip ).

Si vous souhaitez utiliser le même algorithme de compression avec vos archives, utilisez le -Jcommutateur avec tar:

tar cJf archive.tar.xz file1 file2 dir

xzest un outil UNIX, qui utilise LZMA2 pour la compression, mais fonctionne de la façon gz, bz2, etc fonctionne. Cela fonctionne même comme un filtre.

7z ne crée pas d'archives contenant des informations complètes sur le système de fichiers sous UNIX. Il est donc nécessaire de les utiliser taravant d'utiliser 7z (mais puisque 7z stocke d'autres informations sur le tarfichier, je vous recommande de l'utiliser xz, car il est conçu pour cela):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z
polemon
la source
2
Je devrais peut-être annexer cette réponse à la question suivante atool: c’est un joli petit outil qui facilite l’utilisation de nombreux compresseurs. Lier cela à aet créer une archive devient a arc.7z folder/ou extraire un simplea arc.7z
polemon
21
unzip <filename>

et

zip -r archive.zip <filename> [filename]

Vous devrez vous assurer que ces commandes sont installées via votre gestionnaire de paquets. Ce n'est pas plus difficile que d'utiliser autre chose sur la ligne de commande. C'est certainement plus simple que de créer des archives avec tar.

Étoile de mer
la source
Je sais que c'est un vieux fil, mais c'est la meilleure réponse. Ne parle pas de 7z ou de goudron, c'est concis et va droit au but
Kyle
4

BSD Tar peut aussi le faire

bsdtar acf bravo.zip alfa.jpg

Ou:

bsdtar xf bravo.zip
Steven Penny
la source
BSD tarprésente l’avantage de prendre en charge un certain nombre de formats de compression supplémentaires par rapport à GNU taret à d’autres formats tar. Le plus grand avantage est peut-être qu'il le fait en utilisant une tarsyntaxe semblable à celle-ci . Vous pouvez certainement utiliser 7z, unrar, unzip, etc à partir de la ligne de commande, mais ils utilisent une autre syntaxe.
njsg
3

La réponse la plus standard est pax, qui est recommandé sur cpioet tar.

Contrairement à cpioet POSIX tar, mais comme GNU tar, paxest capable d’archiver des fichiers et de compresser l’archive. Ce comportement est différent de celui zipqui compresse chaque fichier avant de le placer dans l'archive.

mouviciel
la source
1
Est-ce que paxles archives zip sont supportées?
Étoile de mer
Non et il ne supporte pas les paxarchives non plus!
roblogic
2

Cela ne concerne que l'extraction.

Pour cela, j'ai commencé à utiliser dtrx.

L'essentiel est d'éliminer la complexité. Donc, vous ne lui transmettez aucune archive et elle détermine ce qu’il faut en faire. Zip, tar, gz ... L'utilisation est toujours la même - dtrx archive.zip. Il pose quelques questions et vous avez terminé.

dtrxest disponible dans la plupart des référentiels, vous pouvez donc apt| yumInstallez-le.

JackLeo
la source
1

Je me trouve souvent en train d'essayer de compresser les fichiers modifiés dans mon répertoire de travail, que ce soit pour copier tous les fichiers modifiés dans un autre répertoire de travail sandbox ou pour les conserver pendant un court instant, car je souhaite annuler certaines des modifications.

Dans ce cas, je copie la liste des fichiers modifiés dans un fichier temporaire et l’utilise zipavec l’option -@.

Disons que j'ai modifié les fichiers Foo.h, Bar.cc et TestBar.cc.

Supposons que je crée un fichier appelé modified-files.txt dont le contenu est le suivant:

Foo.h
Bar.cc
TestBar.cc

J'exécute la commande suivante pour compresser ces fichiers:

cat modified-files.txt | zip modified-files.zip -@
R Sahu
la source