Jessaye de compresser un dossier sous unix. Est-ce que cela peut être fait en utilisant la commande gzip?
Commentaires
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 avectar -zxvf
ou mêmezcat file.tar.gz | tar -xv
. Le fait étant que le tar est complètement indépendant du gzip, la commandetar
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/ &
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 utilisantgunzip -r myfolder
qui décompressera les fichiers de manière récursive. Pour plus dinformations,man gzip
tar
; il prend en charge les options de compression .gzip
est conçu comme un complément àtar
, pas comme un remplacement.comment
car ce nétait pas la réponse à sa question.1
et2
sous le dossierplayground
.gzip -r ./playground
vous donnera1.gz
et2.gz
(et pas plus1
et2
fichiers) sous le dossierplayground
, PAS un fichier compressé avec tout ce quil contient.