Comment compresser tous les fichiers de tous les sous-répertoires en un seul fichier compressé en bash

201

Duplicate possible:
compresser un ensemble de répertoires et créer un fichier compressé tar

Ce message décrit comment compresser chaque fichier individuellement dans une structure de répertoires. Cependant, je dois faire quelque chose de légèrement différent. J'ai besoin de produire un gros fichier gzip pour tous les fichiers d'un certain répertoire. J'ai également besoin de pouvoir spécifier le nom du fichier de sortie pour le fichier compressé (par exemple, files.gz) et écraser l'ancien fichier compressé s'il en existe déjà un.

Doug
la source
gzippar sa nature même, il ne comprime qu'un seul fichier. Pour mettre plusieurs fichiers dans un seul fichier pour le gzipping ultérieur, utilisez tar.
Thomas
Copie
Cœur

Réponses:

387
tar -zcvf compressFileName.tar.gz folderToCompress

tout dans folderToCompress ira à compressFileName

Edit: Après examen et commentaires, j'ai réalisé que les gens peuvent être confondus avec compressFileName sans extension. Si vous le souhaitez, vous pouvez utiliser l'extension .tar.gz (comme suggéré) avec le compressFileName

amitchhajer
la source
2
Merci. Est-ce que cela compressera tout sous "folderToCompress" (c'est-à-dire de manière récursive)?
Doug
2
tout dans folderToCompress ira à compressFileName
amitchhajer
80
Vous voudrez probablement choisir de compressFileNamesorte qu'il inclut l' .tar.gzextension ou vous rendrez tous les autres fous.
drewish
9
Cela fonctionne également pour un nombre arbitraire de répertoires, par exemple tar -zcvf two-dirs.tar.gz dir-one dir-twova créer une archive contenant deux répertoires.
Zoltán
5
*tar -zcvf all.tar.gz *
61

il existe de nombreuses méthodes de compression qui fonctionnent récursivement en ligne de commande et il est bon de savoir qui est le public final.

c'est-à-dire que s'il doit être envoyé à quelqu'un qui exécute Windows, alors le zip serait probablement le meilleur:

zip -r file.zip folder_to_zip

unzip filenname.zip

pour les autres utilisateurs de linux ou votre self tar est super

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

Il faut être prudent avec tar et comment les choses sont goudronnées / extraites, par exemple si je lance

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / myusername

tar -xvzf passwd.tar.gz

cela créera / home / myusername / etc / passwd

Je ne sais pas si toutes les versions de tar font ceci:

 Removing leading `/' from member names
VH
la source
18

Le post de @amitchhajer fonctionne pour GNU tar. Si quelqu'un trouve ce message et en a besoin pour travailler sur un GNUsystème NON , il peut le faire:

tar cvf - folderToCompress | gzip > compressFileName

Pour développer l'archive:

zcat compressFileName | tar xvf -
Jeremy J Starcher
la source
2
En plus d'être portable, cette solution est utile si vous voulez passer des arguments à gzip (par exemple, --test ou --best), car afaik même GNU tar ne fournit pas de moyen d'envoyer des arguments à gzip.
Timothy Woods
Ceci est polyvalent, car vous pouvez également utiliser d'autres compresseurs. Par exemple, pigzqui est plus rapide car il peut mieux utiliser le processeur (une implémentation multi-thread de zip).
Ortwin Angermeier