Como extrair arquivo (s) específico (s) de tar.gz

83

Como podemos extrair arquivos específicos de um arquivo tar.gz grande? Eu encontrei o processo de extrair arquivos de um tar nesta questão mas, quando eu tentei o comando mencionado lá, recebi o erro:

$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

Como faço para extrair um arquivo de tar.gz ?

    
por Ankit Vashistha 16.01.2013 / 08:22

5 respostas

92

você também pode usar tar -zxvf <tar filename> <file you want to extract>

-x: instructs tar to extract files.
-f: specifies filename / tarball name.
-v: Verbose (show progress while extracting files).
-z: filter archive through gzip, use to decompress .gz files.
    
por 16.01.2013 / 08:45
28

Vamos supor que você tenha um tarball chamado lotsofdata.tar.gz e saiba que há apenas um arquivo lá, mas tudo que você pode lembrar é que o nome dele contém a palavra contract . Você tem duas opções:

Use tar e grep para listar o conteúdo de seu tarball para poder descobrir o caminho completo e o nome de todos os arquivos correspondentes à parte que você conhece e use tar para extrair esse arquivo agora você sabe seus detalhes exatos, ou você pode usar dois switches pouco conhecidos para simplesmente extrair todos os arquivos que correspondem ao pouco que você sabe sobre o seu nome de arquivo - você não precisa saber o nome completo ou qualquer parte de seu caminho para isso. opção. Os detalhes são:

Opção 1

$ tar -tzf lotsofdata.tar.gz | grep contract

Isso listará os detalhes de todos os arquivos cujos nomes contenham sua parte conhecida. Então você extrai o que você quer usando:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>

Você pode precisar de ./ na frente de seu caminho para que ele funcione.

Opção 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'

Até você que você acha mais fácil ou mais útil.

    
por 10.08.2014 / 02:17
6

Eu estava tentando extrair algumas centenas de arquivos de um tarball com milhares de arquivos no outro dia. Os arquivos de que preciso não podem ser referenciados por um único caractere curinga. Então eu pesquisei e encontrei esta página.

No entanto, nenhum dos truques acima parece bom para minha tarefa. Acabei lendo o homem, e encontrei essa opção --files-from , então minha solução final é

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -

e funciona como um encanto.

Atualização: O arquivo de lista deve ter o mesmo formato que você veria de tar -tvf , caso contrário você não seria capaz de extrair nenhum arquivo.

    
por 14.07.2016 / 17:12
2

Seu exemplo funciona para mim se você omitir as chaves

$ tar --extract --file=test.tar.gz extract11

Se o seu arquivo extract11 estiver em uma subpasta, você deve especificar o caminho dentro do tarball.

$ tar --extract --file=test.tar.gz subfolder/extract11
    
por 16.01.2013 / 08:37
0

Veja abaixo os exemplos de extração de arquivos específicos do arquivo tar.gz.

Do arquivo local:

$ tar xvf file.tgz path/README.txt 2nd_file.txt

Do URL remoto:

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt
    
por 02.04.2015 / 00:40

Tags