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?

EmmyS
fonte

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.
djeikyb
fonte
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.

JorgeArtware
fonte
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).

djeikyb
fonte
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 .

Sergiy Kolodyazhnyy
fonte
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.
Benyamin Jafari
fonte
4

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

tar -xvzf fileName.tar.gz

Tente extrair usando

tar xf fileName.tar.gz
Shravan40
fonte
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.

dschinn1001
fonte
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ê.

delt
fonte