vous pouvez utiliser gzip -r myfolderquels fichiers gzip récursivement. De la même manière, vous pouvez décompresser des fichiers à l'aide de ceux gunzip -r myfolder qui le seront de manière récursive. Pour plus d'informations, man gzip
Valentin Bajrami
12
Utilisation tar; il prend en charge les options de compression. gzipest conçu comme un complément à tar, pas comme un remplacement.
devnull
13
Notez que la suggestion de @ val0x00ff n'est certainement pas ce que vous voulez accomplir.
Shadur
4
@Shadur c'est pourquoi je l'ai posté commentcar ce n'était pas la réponse à sa question.
Valentin Bajrami
2
Démonstration de ce que @Shadur signifie. Fichiers donnés 1et 2sous dossier playground. gzip -r ./playgroundvous donnera 1.gzet 2.gz(et pas plus 1et les 2fichiers) dans le dossier playground, PAS un fichier compressé avec tout ce qu'il contient.
Jeff Xiao
Réponses:
660
Non.
Contrairement à zip, gzipfonctionne comme un algorithme de compression uniquement .
En raison de diverses raisons dont certaines à l'écouterait - retour ère des lecteurs de bande, Unix utilise un programme nommé tarpour archiver les données, qui peuvent ensuite être compressé avec un programme de compression comme gzip, bzip2, 7zip, etc.
Afin de "zipper" un répertoire, la commande correcte serait
tar -zcvf archive.tar.gz directory/
Cela va dire tarà
compressez-le en utilisant l' algorithme z (gzip)
c (crée) une archive à partir des fichiers de directory( tarest récursive par défaut)
v (verbalement) listez (sur / dev / stderr pour qu’il n’affecte pas les commandes piped) tous les fichiers qu’il ajoute à l’archive.
et stocke la sortie dans un f (fichier) nomméarchive.tar.gz
La tarcommande offre un gzipsupport (via le -zdrapeau) uniquement pour votre commodité. La gzipcommande / lib est complètement séparée. La commande ci-dessus est effectivement la même chose que
tar -cv directory | gzip > archive.tar.gz
Pour décompresser et décompresser l'archive dans le répertoire actuel, vous utiliseriez
tar -zxvf archive.tar.gz
Cette commande est effectivement la même que
gunzip < archive.tar.gz | tar -xv
tara beaucoup, beaucoup, beaucoup d'autres options et utilisations aussi bien; Je recommande vivement de lire sa page de manuel de temps en temps.
Pour rendre les choses encore plus explicites, cela équivaut exactement à tar -cv directory | gzip > archive.tar.gz. Les archives résultantes peuvent ensuite être extraites avec tar -zxvfou même zcat file.tar.gz | tar -xv. Le point tar étant que le tar est complètement indépendant du gzip, la tarcommande inclut simplement le support de gzip pour plus de commodité.
Patrick
J'utilise depuis tar cvzfun certain temps. Une chose à noter: si vous utilisez Windows ( 7-zipà spécifier) pour décompresser un *.tar.gzfichier, il faut deux tours. Une pour décompresser un *.tar.gzfichier dans un *.tarfichier, la suivante pour décompresser ce fichier tar dans le contenu d'origine. cela augmente le temps total de décompression, en particulier pour les gros fichiers (les journaux par exemple)
Jeff Xiao
1
La dénomination de l'archive a-t-elle une incidence sur une machine? Je sais que ce serait bien de faire savoir aux utilisateurs l'algorithme utilisé à l'origine pour le compresser (d'où le format .gz), mais à part cela, est-ce que la façon dont vous nommez l'archive est importante?
hello_there_andy
3
@hello_there_andy Cela ne change rien à la plupart des Unix, mais Windows (et la complétion intelligente des onglets sous Linux) font des suppositions basées sur l'extension du nom de fichier.
La gzipcommande ne compresse pas de manière récursive un répertoire dans un fichier zip unique, lors de l'utilisation du -rcommutateur. Au lieu de cela, il va parcourir cette structure de répertoire et compresser chaque fichier trouvé dans un fichier séparé.
#!/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 s'il était utilisé de manière peu commune).
Comment utiliser:
cd /home/; gzipdir MyDirectory ou gzipdir /home/MyDirectory
Crée /home/MyDirectory.tgz et supprime MyDirectory en cas de succès (!!!).
ungzipdir /home/MyDirectory.tgz
Crée / home / MyDirectory et supprime /home/MyDirectory.tgz en cas de succès.
Pour compresser TOUS les fichiers d'un répertoire: find ./* -maxdepth 0 -type d -exec gzipdir {} \; ( -exec echo {}faites attention à la commande find, testez-la d' abord et assurez-vous de ne pas capturer './', ce qui entraînera la fermeture du répertoire PARENT, ce qui risquerait de casser tout votre répertoire personnel)
Andrew Lorien
1
Je recommande d'utiliser pigz( implémentation parallèle de GZip )
Si vous avez une nouvelle question, posez-la en cliquant sur le bouton Poser une question . Incluez un lien vers cette question si cela permet de fournir un contexte. - De l'avis
Jeff Schaller
2
@ JeffSchaller: Ceci est une réponse. C'est un très mauvais problème (je crois), mais c'est clairement une réponse.
Scott
1
@ize: Je suis à peu près sûr que la commande que vous avez publiée n'utilise pas gzip.
Dhag
1
Points pour l'utilisation de zip comme la question posée, l'auteur aurait probablement aimé savoir qu'il était possible de faire exactement la même chose que sur les fenêtres. Il est triste que la plupart des gens ne souhaitent pas penser aussi loin.
Florian Heigl
2
C'est délicat quand la question précise ... "utiliser gzip".
Jeff Schaller
1
Pour être complet, si vous voulez tarer le fichier en arrière-plan, utilisez la réponse de @ Shadur et ajoutez &à la fin:
gzip -r myfolder
quels fichiers gzip récursivement. De la même manière, vous pouvez décompresser des fichiers à l'aide de ceuxgunzip -r myfolder
qui le seront de manière récursive. Pour plus d'informations,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 dossierplayground
.gzip -r ./playground
vous donnera1.gz
et2.gz
(et pas plus1
et les2
fichiers) dans le dossierplayground
, PAS un fichier compressé avec tout ce qu'il contient.Réponses:
Non.
Contrairement à
zip
,gzip
fonctionne comme un algorithme de compression uniquement .En raison de diverses raisons dont certaines à l'écouterait - retour ère des lecteurs de bande, Unix utilise un programme nommé
tar
pour archiver les données, qui peuvent ensuite être compressé avec un programme de compression commegzip
,bzip2
,7zip
, etc.Afin de "zipper" un répertoire, la commande correcte serait
Cela va dire
tar
àcompressez-le en utilisant l' algorithme z (gzip)
c (crée) une archive à partir des fichiers de
directory
(tar
est récursive par défaut)v (verbalement) listez (sur / dev / stderr pour qu’il n’affecte pas les commandes piped) tous les fichiers qu’il ajoute à l’archive.
et stocke la sortie dans un f (fichier) nommé
archive.tar.gz
La
tar
commande offre ungzip
support (via le-z
drapeau) uniquement pour votre commodité. Lagzip
commande / lib est complètement séparée. La commande ci-dessus est effectivement la même chose quePour décompresser et décompresser l'archive dans le répertoire actuel, vous utiliseriez
Cette commande est effectivement la même que
tar
a beaucoup, beaucoup, beaucoup d'autres options et utilisations aussi bien; Je recommande vivement de lire sa page de manuel de temps en temps.la source
tar -cv directory | gzip > archive.tar.gz
. Les archives résultantes peuvent ensuite être extraites avectar -zxvf
ou mêmezcat file.tar.gz | tar -xv
. Le point tar étant que le tar est complètement indépendant du gzip, latar
commande inclut simplement le support de gzip pour plus de commodité.tar cvzf
un certain temps. Une chose à noter: si vous utilisez Windows (7-zip
à spécifier) pour décompresser un*.tar.gz
fichier, il faut deux tours. Une pour décompresser un*.tar.gz
fichier dans un*.tar
fichier, la suivante pour décompresser ce fichier tar dans le contenu d'origine. cela augmente le temps total de décompression, en particulier pour les gros fichiers (les journaux par exemple)La
gzip
commande ne compresse pas de manière récursive un répertoire dans un fichier zip unique, lors de l'utilisation du-r
commutateur. Au lieu de cela, il va parcourir cette structure de répertoire et compresser chaque fichier trouvé dans un fichier séparé.Exemple
avant
maintenant lance la
gzip
commandeaprès
Si vous préférez compresser la structure de répertoires, vous souhaiterez probablement utiliser la
tar
commande, puis compresser le.tar
fichier obtenu.Exemple
Ce qui entraîne le fichier unique suivant:
Vous pouvez confirmer son contenu:
la source
J'ai écrit ces 2 commandes:
gzipdir
:ungzipdir
:(!!!) Veuillez tester avant utilisation (car il existe un «rm -f» qui pourrait potentiellement supprimer des données importantes s'il était utilisé de manière peu commune).
Comment utiliser:
cd /home/; gzipdir MyDirectory
ougzipdir /home/MyDirectory
Crée /home/MyDirectory.tgz et supprime MyDirectory en cas de succès (!!!).
ungzipdir /home/MyDirectory.tgz
Crée / home / MyDirectory et supprime /home/MyDirectory.tgz en cas de succès.
la source
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(-exec echo {}
faites attention à la commande find, testez-la d' abord et assurez-vous de ne pas capturer './', ce qui entraînera la fermeture du répertoire PARENT, ce qui risquerait de casser tout votre répertoire personnel)Je recommande d'utiliser
pigz
( implémentation parallèle de GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
la source
La réponse à la question "Puis-je compresser un dossier entier à l'aide de zip sur linux?" Consiste à utiliser la syntaxe suivante:
la source
Pour être complet, si vous voulez tarer le fichier en arrière-plan, utilisez la réponse de @ Shadur et ajoutez
&
à la fin:la source
Si votre tar Linux ne prend pas en charge cette
-z
option, vous pouvez utiliser les éléments suivants:la source