web-dev-qa-db-fra.com

Comment archiver et extraire un fichier .tar.gz

Une simple question Sous x86 Solaris 10, j’essayais de compresser un dossier (données) de fichiers.

tar -cvf /path/to/Data/* | gzip > /path/to/archive/Data.tar.gz

Maintenant, je peux lister les noms de fichiers et leurs tailles en utilisant:

gunzip -c Data.tar.gz

Cependant, lorsque j'essaie de décompresser (pour la validation), Data.tar.gz:

gzip -d Data.tar.gz
tar -xvf Data.tar

Je reçois une "erreur de somme de contrôle"

Quelqu'un peut-il suggérer la méthode appropriée pour compresser et extraire les fichiers dans Solaris 10. Merci.

4
Shuvo Shams

Vous pouvez faire archiver en 2 étapes:

$ tar cvf archive.tar file* 
$ gzip archive.tar

(Cela créera archive.tar.gz en supprimant archive.tar.)

Extraction également en 2 étapes:

$ gunzip archive.tar.gz

(Cela créera archive.tar et supprimera archive.tar.gz.)

$ tar xvf archive.tar

Pour lister les fichiers dans le fichier .gz:

gzip -l archive.tar.gz

Alternativement, vous pouvez utiliser 7Zip qui rassemble tous les fichiers et les compresse.

7z a archive.7z Makefile* (to create archive)
7z l archive.7z           (to list files inside the archive)
7z e archive.7z           (to extract)
16
januarvs

Vous devez diriger la sortie de tar cvf sur stdout, pour pouvoir la lire avec gzip:

tar cvf - <path> | gzip > <file>

En général, il est également recommandé d'utiliser des noms de chemin relatifs. L'utilisation d'un chemin commençant par/peut poser problème si vous souhaitez le décompresser sur un autre système. gnu tar transformera les chemins absolus en chemins relatifs. gnu tar accepte également une option de compression, gzip n'est donc plus nécessaire:

gnutar cvfz <file> <path>

De plus, vous pourriez faire quelque chose comme:

tar cvf - <path> | ssh remotehost (cd <another dir>; gzip > <file>)

ce qui changera le répertoire avant de compresser.

La page de manuel de Solaris tar contient d'autres exemples. Voir man tar (8).

2
paridaen

Puisque vous êtes en train de piping (comme vous le devriez), vous devez utiliser - pour indiquer stdin ou stdout. Par exemple.

tar -cvf - data/* | gzip > data.tar.gz
gzip -dc data.tar.gz | tar -xvf -
1
Mark Adler