Que comando eu preciso para descompactar / extrair um arquivo .tar.gz?


829

Recebi um arquivo .tar.gz enorme de um cliente que contém cerca de 800 mb de arquivos de imagem (quando não compactado.) O ftp da empresa de hospedagem é muito lento, portanto, extrair todos os arquivos localmente e enviá-los via ftp não é prático. Consegui enviar o arquivo .tar.gz ao nosso site de hospedagem, mas quando ssh no meu diretório e tento usar o descompactação, ocorre o seguinte erro:

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

Qual comando eu preciso usar para extrair todos os arquivos em um arquivo .tar.gz?

Respostas:


1389

Digite man tarpara obter mais informações, mas este comando deve fazer o truque:

tar -xvzf community_images.tar.gz

Para explicar um pouco mais, o tar coletou todos os arquivos em um pacote community_images.tar,. O programa gzip aplicou compressão, daí a extensão gz. Portanto, o comando faz algumas coisas:

  • f: Esta deve ser a última bandeira do comando, eo tar f ile deve ser imediatamente depois. Diz ao tar o nome e o caminho do arquivo compactado.
  • z: diz ao tar para descomprimir o arquivo morto usando g z ip
  • x: tar pode coletar arquivos ou ex tratá-los. xfaz o último.
  • v: faz o tar falar muito. A saída V erbose mostra todos os arquivos que estão sendo extraídos.

5
@Shiki Vi sua edição proposta. Não acho que seja uma alteração apropriada, prefiro a maneira como expliquei essa ferramenta. Eu não acho que sua tar -xfsugestão seria fazer uma grande resposta adicional.
— djeikyb 02/12/19

3
Esta é uma das melhores explicações para fora dos milhões de perguntas semelhante formuladas
— JohnMerlino

1
@KasunSiyambalapitiya Por padrão, acaba na pasta atual. Veja também man tar; procure a -Copção. Ou talvez confira a outra resposta 😉
— djeikyb

6
Me lembra o artigo do xckd sobre o tar. Eu tenho que voltar toda vez.
— mgarey

19
Meu mnemônico para isso é: x trato z e v *** ing de f iles.
— Agargara 04/04

172

Se você deseja que os arquivos sejam extraídos para um destino específico, você pode adicionar Certifique-se de criar o diretório primeiro, neste caso: ~ / Pictures / Community-C /destination/path/

Exemplo:

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

Você pode facilmente memorizar se você considerar dizendo tar a e X trato um F ile

gif do processo realizado no terminal

Nota: Lembre - se de que você pode procurar dentro das páginas do manual com ?+ termo para procurar e, em seguida, ne Nir para a instância seguinte ou anterior do termo que você está procurando.


5
não se esqueça de C para " diretório c hange"! Além disso, acho que é melhor não misturar opções de hífen e não-hífen (especialmente confusas ao usar ps).
— precisa saber é o seguinte

2
Por que não é como todos os outros comandos de todos os tempos?
— Jan M.

6
Eu adoro a sua dica 'tar to e X trate a File' #
— N Nam G VU

2
1+ para o gif animado
— Nick Steele

Pode-se também usar --directory="/home/emmys/Pictures/Community/"(o que eu acho mais fácil lembrar do que -C).
— Patrick Dark

107

Em algum momento tarfoi atualizado para descompactar automaticamente. Tudo que você precisa agora é:

tar xf community_images.tar.gz

A mesma explicação se aplica:

  • f: Esta deve ser a última bandeira do comando, eo tar f ile deve ser imediatamente depois. Diz ao tar o nome e o caminho do arquivo compactado.
  • x: x remova os arquivos.

Observe a falta de hífen para os sinalizadores de comando. Isso ocorre porque a maioria das versões do tar permite opções de estilo gnu e bsd (simplisticamente, o gnu requer um hífen, o bsd não).


1
Existe alguma documentação sobre isso? Eu tenho procurado por toda parte uma referência a isso, nunca uso a bandeira -z e tudo fica compactado, então fiquei preocupado se não estiver comprimindo meus tarballs, haha. Obrigado.
— Neurosnap

2
@neurosnap veja o manual do gnu e do manual do bsd
— djeikyb

3
Provavelmente teria sido melhor editar sua resposta original.
— Seth

3
@Seth parece / sentiu-se suficientemente distinto para ser uma resposta separada, especialmente no contexto da edição destrutiva que a provocou. Vou repensá-lo depois do trabalho, porém, pode ser uma maneira mais simples de mesclar do que eu pensava inicialmente.
— djeikyb

2
@EnricoMariaDeAngelis tar bsd desde pelo menos 2004 e tar gnu desde pelo menos 2010 suportou a seleção automática de um descompressor. é possível que nenhuma versão "recente" (deste século? noventa +?) do tar exija a seleção manual de um descompressor.
— precisa saber é o seguinte

11

Lembrar todas as bandeiras de tarpode ser entediante. XKCD obrigatório:

insira a descrição da imagem aqui

Portanto, eu criei meu próprio pequeno script em Python para fazer isso. Rápido, sujo, cpcomo no uso:

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

Use-o assim:

myuntar.py archive.tar

Consulte também script semelhante para descompactar arquivos zip .


2
:) apenas dois sinalizadores de tar a serem lembrados -cafpara criar com base no nome do arquivo e -xfpara extrair (o AFAIK funciona em todos os tipos de tar).
— Videonauth

@Videonauth eu sei, não é tão complexo, mas por alguma razão eu nunca me lembro dessas opções. Talvez porque eu não lido com arquivos com bastante frequência.
— Sergiy Kolodyazhnyy

isso fará apenas arquivos tar compactados? Os documentos api mencionam um modo de leitura com compactação transparente; isso se comportaria mais tar xf <file>?
— djeikyb 13/04

7

Resposta rápida:

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

[ NOTA ]:

  • -v Listar verbalmente os arquivos processados.
  • -z Filtre o arquivo morto pelo gzip.
  • -f Use o arquivo ou dispositivo de arquivo ARQUIVO.
  • -x Extrair arquivos de um arquivo.
  • -j bzip2.
  • tar -xfarchive.tar # Extrai todos os arquivos de archive.tar.

4

Caso você não consiga extrair o .tar.gzarquivo usando

tar -xvzf fileName.tar.gz

Tente extrair usando

tar xf fileName.tar.gz

4
se for um arquivo tar compactado com gzip, o primeiro comando sempre funcionará. se não funcionar, você não possui um arquivo tar compactado com gzip. o último comando é uma ótima recomendação para pessoas que não se importam com o algoritmo de compactação usado no arquivo tar.
— djeikyb

0

Você também pode fazer isso na primeira etapa:

gunzip community_images.tar.gz

Então você tem o arquivo: community_images.tar

O segundo passo seria:

tar -xvf community_images.tar

E o arquivo * .tar seria extraído.


0

tar xvf file.tar.gz

  • x para extração
  • v para detalhado (listar arquivos)
  • f para o nome do arquivo é o próximo

Qualquer versão remotamente moderna do tar deve detectar automaticamente que o arquivo compactado foi compactado com gzip e adicionar "z" para você.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.