Jessaye de compresser un dossier sous unix. Est-ce que cela peut être fait en utilisant la commande gzip?

Commentaires

  • vous pouvez utiliser gzip -r myfolder qui gzipera les fichiers de manière récursive. De la même manière que vous pouvez décompresser des fichiers en utilisant gunzip -r myfolder qui décompressera les fichiers de manière récursive. Pour plus dinformations, man gzip
  • Utilisez tar; il prend en charge les options de compression . gzip est conçu comme un complément à tar, pas comme un remplacement.
  • Notez que @ val0x00ff ‘ nest certainement pas ce que vous voulez accomplir.
  • @Shadur que ‘ est la raison pour laquelle je lai publiée comme comment car ce nétait pas la réponse à sa question.
  • Démonstration de la signification de @Shadur. Fichiers donnés 1 et 2 sous le dossier playground . gzip -r ./playground vous donnera 1.gz et 2.gz (et pas plus 1 et 2 fichiers) sous le dossier playground, PAS un fichier compressé avec tout ce quil contient.

Réponse

Non.

Contrairement à zip, gzip fonctionne comme un algorithme de compression uniquement .

Pour diverses raisons dont certaines remontent à lère des lecteurs de bande, Unix utilise un programme nommé tar pour archiver les données, qui peuvent ensuite être compressées avec un programme de compression comme gzip, bzip2, 7zip, etc.

Dans pour « compresser » un répertoire, la commande correcte serait

tar -zcvf archive.tar.gz directory/ 

Cela indiquera tar à

  • compressez-le à laide de lalgorithme z (gzip)

  • c (créer) une archive à partir des fichiers dans directory (tar est récursif par défaut)

  • v (verbosement) liste (sur / dev / stderr donc cela naffecte pas les commandes redirigées) tous les fichiers quil ajoute à larchive.

  • et stocke la sortie sous forme de f (fichier) nommé archive.tar.gz

La commande tar offre une assistance gzip (via le drapeau -z) uniquement pour votre commodité . La commande / lib gzip est complètement séparée. La commande ci-dessus est en fait la même que

tar -cv directory | gzip > archive.tar.gz 

Pour décompresser et décompresser larchive dans le répertoire courant que vous utiliseriez

tar -zxvf archive.tar.gz 

Cette commande est en fait la même que

gunzip < archive.tar.gz | tar -xv 

tar en a beaucoup, beaucoup, BEAUCOUP dautres options et utilisations également; Je recommande vivement de lire sa page de manuel de temps en temps.

Commentaires

  • Juste pour rendre les choses encore plus explicites, cela équivaut exactement à tar -cv directory | gzip > archive.tar.gz. Larchive résultante peut ensuite être extraite avec tar -zxvf ou même zcat file.tar.gz | tar -xv. Le fait étant que le tar est complètement indépendant du gzip, la commande tar inclut simplement le support de gzip pour plus de commodité.
  • Jai utilisé tar cvzf pendant un bon moment. une chose à noter: si vous utilisez Windows (7-zip à préciser) pour décompresser un fichier *.tar.gz, cela prend deux tours. Un pour décompresser le fichier *.tar.gz dans un fichier *.tar, le suivant pour décompresser ce fichier tar dans le contenu dorigine. cela augmente le temps total de décompression, en particulier pour les fichiers volumineux (par exemple les journaux)
  • La dénomination de larchive affecte-t-elle quelque chose au niveau de la machine? Je sais que ce serait bien de faire savoir aux gens lalgorithme utilisé à lorigine pour le compresser (doù .gz), mais à part cela, est-ce vraiment important de nommer larchive?
  • @hello_there_andy différence avec la plupart des Unix, mais Windows (et la complétion par tabulation intelligente sous Linux) fera des hypothèses basées sur lextension de nom de fichier.
  • @vadimkotov Cela pourrait être ce que vous ‘ re recherche: superuser.com/questions/168749/…

Réponse

La commande gzip ne compressera pas de manière récursive un répertoire en un seul fichier zip, lors de lutilisation de -r commutateur. Il parcourra plutôt cette structure de répertoires et compressera chaque fichier quil trouve dans un fichier séparé.

Exemple

avant

$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3 

maintenant exécutez le gzip commande

$ gzip -r dir1 

after

$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz 

Si vous « préférez compresser la structure du répertoire, vous » voudrez probablement utiliser la commande tar, puis compresser le résultat .tar fichier.

$ tar zcvf dir1.tar.gz dir1/ 

Exemple

$ tar zcvf dir1.tar.gz dir1/ dir1/ dir1/file1 dir1/file2 dir1/dir11/ dir1/dir11/file11.gz dir1/dir11/file12.gz dir1/dir11/file13.gz dir1/file3 

Ce qui donne le fichier unique suivant:

$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz 

Vous pouvez confirmer son contenu:

$ tar ztvf dir1.tar.gz drwxrwxr-x saml/saml 0 2013-10-01 08:05 dir1/ -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file1 -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file2 drwxrwxr-x saml/saml 0 2013-10-01 08:04 dir1/dir11/ -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file11.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file12.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file13.gz -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file3 

Réponse

La réponse à la question « Puis-je compresser un dossier entier en utilisant gzip [sous linux]? » est que vous pouvez utiliser le programme zip à la place de gzip, avec la syntaxe:

zip -r <zip file name> <folder to zip> 

Commentaires

  • @JeffSchaller: Ceci est une réponse. Cest une très mauvaise réponse (je crois), mais cest clairement une réponse.
  • @ize: Je ‘ je suis presque sûr que la commande que vous avez postée ne le fait pas, en fait, utilisez gzip.
  • Points pour utiliser zip comme la question posée, très probablement lauteur aurait aimé savoir quil est possible de ‘ FAIRE LEXACTE MÊME CHOSE quil faisait sur les fenêtres. Il est triste que la plupart des gens ‘ ne veuillent pas penser aussi loin.
  • Cest délicat quand la question spécifie … « using gzip ».
  • Je ‘ m voter pour cette réponse car je pense que le produit (un fichier zip) est probablement plus important que la méthode (utilisant gzip).

Réponse

Jai écrit ces 2 commandes:

gzipdir:

#!/bin/bash if [[ -d $1 ]]; then cd "$1" cd .. base=$(basename "$1") tar -zcvf "$base.tgz" "$base" if [[ $? == 0 && -f "$base.tgz" ]]; then rm -rf "$base" fi else echo "Usage: $0 DIRECTORY"; fi 

ungzipdir:

#!/bin/bash if [[ -f $1 ]]; then base=${1%%.*} file=$(basename "$1"); dir=$(basename "$base"); if [[ ! -d $base ]]; then mkdir "$base" cd "$base" cd .. tar -xvf "$file" if [[ $? == 0 && -d "$dir" ]]; then rm -f "$file" fi else echo "Directory $base already exists. Nothing done." fi else echo "Usage: $0 file.tgz"; fi 

(!!!) Veuillez tester avant utilisation (car il existe un « rm -f » qui pourrait potentiellement supprimer des données importantes sil est utilisé de manière inhabituelle).

Comment utiliser:

cd /home/; gzipdir MyDirectory ou gzipdir /home/MyDirectory

Créera /home/MyDirectory.tgz et supprimera MyDirectory en cas de succès (!!!).

ungzipdir /home/MyDirectory.tgz

Créera / home / MyDirectory et supprimera /home/MyDirectory.tgz en cas de succès.

Commentaires

  • Pour compresser TOUS les fichiers dun répertoire: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (soyez prudent avec la commande find, testez-la avec -exec echo {} dabord, et assurez-vous que ‘ ne capture pas ‘ ./’ qui compressera le répertoire PARENT, cassant éventuellement tout votre répertoire personnel)

Answer

Je recommande dutiliser pigz ( Implémentation parallèle de GZip )

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

Commentaires

  • Je lutilise aussi beaucoup (et pixz), mais cela fonctionne-t-il lorsque les tubes et la redirection de sortie entrent en jeu?

Réponse

Si votre tar Linux « ne prend pas en charge loption -z vous pouvez utiliser ce qui suit:

tar -cvf - dir | gzip > dir.tar.gz 

Answer

Par souci dexhaustivité, si vous veux tarer le fichier dans le bac kground, utilisez la réponse de @Shadur « et ajoutez & à la fin:

tar -zcvf archive.tar.gz directory/ & 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *