web-dev-qa-db-fra.com

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

Comment puis-je créer et extraire des archives Zip à partir de la ligne de commande?

570
joachim

En général, on utilise tar pour créer une archive non compressée et gzip ou bzip2 Pour compresser cette archive. Les commandes gunzip et bunzip2 Correspondantes peuvent être utilisées pour décompresser ladite archive, ou vous pouvez simplement utiliser des indicateurs sur la commande tar pour effectuer la décompression.

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

Pour compresser:

Zip squash.Zip file1 file2 file3

ou pour 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.

698
Justin Ethier

Il existe vraiment vaste nombre de façons différentes de compresser et de décompresser sous les dérivés UNIX donc je vais supposer que vous vouliez dire "Zip" dans le sens générique plutôt qu'un spécifique format de fichier.

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

tar -zcvf myfile.tgz .

qui fera le répertoire courant. Remplacer . avec d'autres noms de fichiers si vous voulez autre chose.

Pour décompresser ce fichier, utilisez:

tar -zxvf myfile.tgz

Cela suppose bien sûr que vous disposez d'un tar capable de faire la compression ainsi que de combiner des fichiers en un seul.

Sinon, vous pouvez simplement utiliser tar cvf suivi de gzip (à nouveau, si disponible) pour la compression et gunzip suivi de tar xvf.


Pour une gestion spécifique des fichiers au format Zip, je recommanderais de télécharger 7Zip et en utilisant cela - il reconnaît une énorme variété de formats de fichiers, y compris le Zip.

68
user14408

Si vous n'avez pas installé de packages Zip et décompressez et que vous avez Java, vous pouvez utiliser jar pour décompresser:

jar -xf file.Zip
33
mlocke

Eh bien, quand il s'agit de distribuer des fichiers pour une variété de systèmes d'exploitation, je recommanderais 7-Zip .

Habituellement dans le package p7Zip, vous obtiendrez le 7z et 7za, avec laquelle vous pouvez créer vos propres archives 7z.

7za peut également décompresser les archives Zip standard ( pkzip ) (et les créer également avec le -tzip commutateur).

Compression:

7za a archive.7z file1 file2 directory/

Décompression:

7za x archive.7z

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

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 tarballs, utilisez le -J changer avec tar:

tar cJf archive.tar.xz file1 file2 dir

xz est un outil UNIX, qui utilise LZMA2 pour la compression, mais fonctionne comme gz, bz2, etc. fonctionne. Cela fonctionne même comme un filtre.

7z ne crée pas d'archives avec des informations complètes sur le système de fichiers sous UNIX, vous devez donc utiliser tar avant d'utiliser 7z (mais comme 7z stocke d'autres informations sur le fichier tar, je recommande en utilisant xz, tel qu'il est conçu pour cela):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z
30
polemon
unzip <filename>

et

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

Vous devrez vous assurer que ces commandes sont installées via votre gestionnaire de packages. 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.

23
Starfish

BSD Tar peut également le faire

bsdtar -a -c -f sunday.Zip sunday.jpg

Ou:

bsdtar -x -f sunday.Zip
4
Steven Penny

La réponse la plus standard est pax , ce qui est recommandé par rapport à cpio et tar .

Contrairement à cpio et POSIX tar, mais comme GNU tar, pax peut à la fois archiver des fichiers et compresser le fichier Ce comportement est différent de Zip , qui compresse chaque fichier avant de le placer dans l'archive.

3
mouviciel

Cela ne couvre que l'extraction.

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

Son but est de supprimer la complexité. Il vous suffit donc de lui transmettre n'importe quelle archive et il comprend ce qui doit être fait avec. Zip, tar, gz ... L'utilisation est toujours la même - dtrx archive.Zip. Il pose quelques questions et vous avez terminé.

dtrx est disponible dans la plupart des référentiels, vous pouvez donc apt | yum l'installer.

2
JackLeo

Je me retrouve souvent à essayer de compresser les fichiers modifiés dans mon répertoire de travail - soit pour copier tous les fichiers modifiés dans un autre répertoire de travail sandbox, soit pour les conserver pendant un court moment parce que je veux annuler certaines des modifications.

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

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

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

Foo.h
Bar.cc
TestBar.cc

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

cat modified-files.txt | Zip modified-files.Zip -@
1
R Sahu