Di quale comando ho bisogno per decomprimere / estrarre un file .tar.gz?


829

Ho ricevuto un enorme file .tar.gz da un client che contiene circa 800 mb di file di immagine (quando non compresso). La nostra società di hosting ftp è seriamente lenta, quindi estrarre tutti i file localmente e inviarli via ftp non è pratico. Sono stato in grado di ftp il file .tar.gz sul nostro sito di hosting, ma quando ho SSH nella mia directory e provo a usare unzip, mi dà questo errore:

[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.

Quale comando devo usare per estrarre tutti i file in un file .tar.gz?

Risposte:


1389

Digitare man tarper ulteriori informazioni, ma questo comando dovrebbe fare il trucco:

tar -xvzf community_images.tar.gz

Per spiegare un po 'più avanti, tar ha raccolto tutti i file in un unico pacchetto, community_images.tar. Il programma gzip ha applicato la compressione, quindi l'estensione gz. Quindi il comando fa un paio di cose:

  • f: Questo deve essere l'ultima bandiera del comando, e il catrame f ile deve essere subito dopo. Indica a tar il nome e il percorso del file compresso.
  • z: dice a tar di decomprimere l'archivio usando g z ip
  • x: Tar in grado di raccogliere i file o posta x loro tratto. xfa quest'ultimo.
  • v: fa parlare molto il tar. V erbose output mostra tutti i file che vengono estratti.

5
@Shiki ho visto la tua modifica proposta. Non penso che sia un cambiamento appropriato, preferisco il modo in cui ho spiegato questo strumento. Io non credo che il tuo tar -xfsuggerimento potrebbe fare una grande risposta supplementare.
djeikyb,

3
Questa è una delle spiegazioni migliori di milioni di domande formulate allo stesso modo
John Merlino,

1
@KasunSiyambalapitiya Per impostazione predefinita, finisce nella cartella corrente. Vedi anche man tar; cerca l' -Copzione. O forse dai un'occhiata all'altra risposta 😉
djeikyb

6
Mi ricorda l'articolo di xckd sul tar. Devo tornare ogni volta.
mgarey,

19
Il mio mnemonico per questo è: x tract z e v *** ing f iles.
Agargara,

172

Se vuoi che i file vengano estratti in una destinazione particolare, puoi aggiungere Assicurati di creare prima la directory, in questo caso: ~ / Pictures / Community-C /destination/path/

Esempio:

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

Puoi memorizzarlo facilmente se consideri di dire tar to e X tract a F ile

gif del processo fatto al terminale

Nota: Ricorda che puoi cercare nelle pagine man con il ?termine + da cercare, e poi ne Npassare all'istanza successiva o precedente del termine che stai cercando.


5
non dimenticare C per " c hange directory"! Inoltre, mi sento che è meglio non mischiare trattino e opzioni non trattino (soprattutto confusione quando si usa ps).
djeikyb,

2
Perché non è -o come ogni altro comando di sempre?
Jan M.

6
Adoro il tuo suggerimento 'tar to e X tract a F ile'
Nam G VU

2
1+ per la gif animata
Nick Steele,

Si può anche usare --directory="/home/emmys/Pictures/Community/"(che penso sia più facile da ricordare di -C).
Patrick Dark,

107

Ad un certo punto è tarstato aggiornato per l'auto-decomprimere. Tutto ciò che serve ora è:

tar xf community_images.tar.gz

Si applica la stessa spiegazione:

  • f: Questo deve essere l'ultima bandiera del comando, e il catrame f ile deve essere subito dopo. Indica a tar il nome e il percorso del file compresso.
  • x: e x tratta i file.

Notare la mancanza di trattino per i flag di comando. Questo perché la maggior parte delle versioni di tar consente entrambe le opzioni di stile gnu e bsd (semplicisticamente, gnu richiede un trattino, bsd no).


1
C'è della documentazione su questo? Ho cercato dappertutto un riferimento a questo, non uso mai la bandiera -z e tutto viene compresso, quindi sono stato preoccupato se non ho compresso affatto i miei tarball, ahah. Grazie.
neurosnap,

2
@neurosnap vedi il manuale gnu e del manuale
bsd

3
Probabilmente sarebbe stato meglio modificare la risposta originale.
Seth

3
@Seth sembra abbastanza distinto da essere una risposta separata, specialmente nel contesto della modifica distruttiva che l'ha provocata. Ci ripenserò dopo il lavoro, però, potrebbe essere un modo più semplice di unire di quanto pensassi inizialmente.
djeikyb,

2
@EnricoMariaDeAngelis bsd tar almeno dal 2004 e gnu tar almeno dal 2010 hanno supportato la selezione automatica di un decompressore. è possibile che nessuna versione "recente" (questo secolo? novanta +?) di tar richieda la selezione manuale di un decompressore.
djeikyb,

11

Ricordare tutte le bandiere per tarpuò essere noioso. XKCD obbligatorio:

inserisci qui la descrizione dell'immagine

Pertanto ho realizzato la mia piccola sceneggiatura in Python per farlo. Veloce, sporco, cpsimile all'utilizzo:

#!/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()

Usalo così:

myuntar.py archive.tar

Vedi anche script simili per decomprimere archivi zip .


2
:) solo due flag tar da ricordare -cafper la creazione in base al nome file e -xfper l'estrazione (AFAIK funziona su ogni tipo di tar).
Videonauth,

@Videonauth Lo so, non è così complesso, ma per qualche motivo non ricordo mai queste opzioni. Forse perché non mi occupo abbastanza spesso degli archivi.
Sergiy Kolodyazhnyy,

questo farà solo file tar gzipped? i documenti api menzionano una modalità di lettura con compressione trasparente; si comporterebbe di più tar xf <file>?
djeikyb,

7

Risposta rapida:

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

[ NOTA ]:

  • -v Elenca in modo dettagliato i file elaborati
  • -z Filtra l'archivio tramite gzip.
  • -f Utilizzare il file di archivio o l'ARCHIVIO del dispositivo.
  • -x Estrai file da un archivio.
  • -j bzip2.
  • tar -xfarchive.tar # Estrae tutti i file da archive.tar.

4

Nel caso in cui non sia possibile estrarre il .tar.gzfile utilizzando

tar -xvzf fileName.tar.gz

Prova a estrarre usando

tar xf fileName.tar.gz

4
se si tratta di un file tar compresso con gzip, il primo comando funzionerà sempre. se non funziona, non hai un file tar compresso con gzip. il secondo comando è una grande raccomandazione per le persone a cui non importa quale algoritmo di compressione è stato usato nel loro file tar.
djeikyb

0

Potresti farlo anche nel primo passaggio:

gunzip community_images.tar.gz

Quindi hai il file: community_images.tar

Il secondo passo sarebbe:

tar -xvf community_images.tar

E il file * .tar verrebbe estratto.


0

tar xvf file.tar.gz

  • x per estratto
  • v per verbose (elenca i file)
  • f per il nome del file è il prossimo

Qualsiasi versione moderna e remota di tar dovrebbe rilevare automaticamente che l'archivio è compresso con gzip e aggiungere "z" per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.