De quelle commande ai-je besoin pour décompresser / extraire un fichier .tar.gz?

829

J'ai reçu un énorme fichier .tar.gz d'un client contenant environ 800 Mo (non compressé) de fichiers image. Le ftp de notre hébergeur étant très lent, il n'est pas pratique d'extraire tous les fichiers localement et de les envoyer via FTP. J'ai pu transférer le fichier .tar.gz sur notre site d'hébergement, mais lorsque je ssh dans mon répertoire et que j'essaie d'utiliser unzip, le message d'erreur suivant s'affiche:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.

Quelle commande dois-je utiliser pour extraire tous les fichiers d'un fichier .tar.gz?

EmmyS
la source

Réponses:

1389

Tapez man tarpour plus d'informations, mais cette commande devrait faire l'affaire:

tar -xvzf community_images.tar.gz

Pour expliquer un peu plus loin, le goudron recueilli tous les fichiers dans un seul paquet, community_images.tar. Le programme gzip a appliqué la compression, d’où l’extension gz. Donc, la commande fait deux choses:

  • f: Cela doit être le dernier drapeau de la commande, et le goudron f ile doit être immédiatement après. Il indique à tar le nom et le chemin du fichier compressé.
  • z: indique à tar de décompresser l'archive à l'aide de g z ip
  • x: Le goudron peut collecter des fichiers ou e x les voies. xfait le dernier.
  • v: fait parler beaucoup de goudron. V sortie erbose vous montre tous les fichiers extraits.
djeikyb
la source
5
@ Shhiki, j'ai vu votre modification proposée. Je ne pense pas que ce soit un changement approprié, je préfère la façon dont j'ai expliqué cet outil. Je ne pense que votre tar -xfsuggestion serait une excellente réponse supplémentaire.
djeikyb
3
Ceci est l'une des meilleures explications sur des millions de questions similaires
JohnMerlino
1
@KasunSiyambalapitiya Par défaut, se termine dans le dossier actuel. Voir aussi man tar; cherche l' -Coption. Ou peut-être consulter l'autre réponse
djeikyb
6
Cela me rappelle l'article de xckd sur le tar. Je dois revenir à chaque fois.
mgarey
19
Mon mnémotechnique pour cela est: x tube z e v *** ing f Iles.
Agargara
172

Si vous souhaitez que les fichiers soient extraits vers une destination particulière, vous pouvez les ajouter. Assurez-vous de créer d'abord le répertoire, dans ce cas: ~ / Pictures / Community-C /destination/path/

Exemple:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/

Vous pouvez facilement mémoriser si vous considérez dire goudron à e X appareil un F ile

gif du processus fait au terminal

Remarque: Rappelez -vous que vous pouvez effectuer une recherche dans les pages de manuel avec ?+ terme à rechercher, puis net Nd'aller à l'instance suivante ou précédente du terme que vous recherchez.

JorgeArtware
la source
5
n'oubliez pas C pour " c hange directory"! En outre, j'estime qu'il est préférable de ne pas mélanger les options trait d'union et non-trait d'union (ce qui peut prêter à confusion lors de l'utilisation ps).
djeikyb
2
Pourquoi n'est-il pas comme toutes les autres commandes?
Jan M.
6
J'adore votre allusion "X X Tract a F ile"
Nam G VU
2
1+ pour le gif animé
Nick Steele
On peut aussi utiliser --directory="/home/emmys/Pictures/Community/"(ce qui, à mon avis, est plus facile à retenir que -C).
Patrick Dark
107

À un moment donné a tarété mis à niveau pour une décompression automatique. Tout ce dont vous avez besoin maintenant est:

tar xf community_images.tar.gz

La même explication s'applique:

  • f: Cela doit être le dernier drapeau de la commande, et le goudron f ile doit être immédiatement après. Il indique à tar le nom et le chemin du fichier compressé.
  • x: E x Tract les fichiers.

Notez l'absence de trait d'union pour les indicateurs de commande. En effet, la plupart des versions de tar autorisent les options de style gnu et bsd (en résumé, gnu nécessite un trait d'union, mais pas bsd).

djeikyb
la source
1
Y at-il de la documentation à ce sujet? J'ai cherché partout une référence à cela, je n'utilise jamais le drapeau -z et tout est gzippé, donc je suis inquiet si je n'ai pas compressé mes archives, haha. Merci.
neurosnap
2
@neurosnap voir le manuel gnu et le manuel de bsd
djeikyb
3
Il aurait probablement été préférable de modifier votre réponse originale.
Seth
3
@Seth, il me semble que la réponse est suffisamment distincte, en particulier dans le contexte de l'édition destructive qui l'a provoquée. Je vais repenser cela après le travail cependant, pourrait être un moyen plus simple de fusionner que je ne le pensais au départ.
djeikyb
2
@EnricoMariaDeAngelis bsd tar depuis au moins 2004 et gnu tar depuis au moins 2010 ont pris en charge la sélection automatique d'un décompresseur. il est possible qu'aucune version "récente" de tar ne nécessite la sélection manuelle d'un décompresseur.
djeikyb
11

Se souvenir de tous les drapeaux tarpeut être fastidieux. XKCD obligatoire:

entrez la description de l'image ici

C'est pourquoi j'ai créé mon propre petit script en Python. Rapide, sale, cpcomme dans l'utilisation:

#!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()

Utilisez-le comme suit:

myuntar.py archive.tar

Voir aussi un script similaire pour décompresser des archives zip .

Sergiy Kolodyazhnyy
la source
2
:) Seuls deux drapeaux tar à retenir -cafpour créer en fonction du nom de fichier et -xfpour extraire (autant que je sache, tout type de tar).
Videonauth
@Videonauth Je sais, ce n'est pas si complexe, mais pour une raison quelconque, je ne me souviens jamais de ces options. Peut-être parce que je ne traite pas assez souvent avec les archives.
Sergiy Kolodyazhnyy
cela ne fera-t-il que des fichiers tar compressés? api docs mentionne un mode de lecture avec compression transparente; cela se comporterait-il davantage tar xf <file>?
djeikyb
7

Réponse rapide:

tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>

[ NOTE ]:

  • -v Liste verbalement des fichiers traités.
  • -z Filtrer l'archive via gzip.
  • -f Utilisez le fichier archive ou le périphérique ARCHIVE.
  • -x Extraire des fichiers d'une archive.
  • -j bzip2.
  • tar -xfarchive.tar # Extrait tous les fichiers de archive.tar.
Benyamin Jafari
la source
4

Au cas où vous ne pourriez pas extraire le .tar.gzfichier en utilisant

tar -xvzf fileName.tar.gz

Essayez d’extraire avec

tar xf fileName.tar.gz
Shravan40
la source
4
s'il s'agit d'un fichier tar compressé, la première commande fonctionnera toujours. si cela ne fonctionne pas, vous n'avez pas de fichier tar compressé. Cette dernière commande est une excellente recommandation pour les utilisateurs qui se moquent de l’algorithme de compression utilisé dans leur fichier tar.
djeikyb
0

Vous pouvez le faire aussi dans un premier temps:

gunzip community_images.tar.gz

Ensuite, vous avez le fichier: community_images.tar

La deuxième étape serait:

tar -xvf community_images.tar

Et le fichier * .tar serait extrait.

dschinn1001
la source
0

tar xvf fichier.tar.gz

  • x pour extrait
  • v pour verbose (liste de fichiers)
  • f pour le nom de fichier est le suivant

Toute version à distance de tar doit détecter automatiquement que l'archive est compressée et ajouter "z" pour vous.

delt
la source