Como podemos extrair arquivos específicos de um arquivo tar.gz grande? Encontrei o processo de extração de arquivos de um tar nesta pergunta , mas quando 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 então extraio um arquivo tar.gz
?
Respostas:
Você também pode usar
tar -zxvf <tar filename> <file you want to extract>
Você deve escrever o nome do arquivo exatamente como
tar ztf test.tar.gz
mostra. Se diz./extract11
, por exemplo , ousome/bunch/of/dirs/extract11
, é isso que você precisa fornecer (e o arquivo será exibido exatamente com esse nome, os diretórios necessários serão criados automaticamente).-x
: instrui o tar a extrair arquivos.-f
: especifica o nome do arquivo / tarball.-v
: Detalhado (mostra o progresso ao extrair arquivos).-z
: filtre o arquivo morto pelo gzip, use para descompactar arquivos .gz.fonte
$ tar -zxvf test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
tar tf archive.tar.gz | grep extract11
.please verificar se extract11 é no arquivo ou nãotar ztf test.tar.gz
mostra. Se diz./extract11
, por exemplo , ousome/bunch/of/dirs/extract11
, é isso que você precisa fornecer (e o arquivo será exibido exatamente com esse nome, os diretórios necessários serão criados automaticamente).-z
opção não funciona em algumas versões do unix como o HP-UX.f
não deve estar no final. Mas deve ser seguido diretamente pelo nome do arquivo. Este exemplo com todas as outras opções após o nome tar funciona bem:tar -f mytar.tar.gz -zxv dir/somefile
. Extrai "dir / somefile" de "mytar.tar.gz".Vamos supor que você tenha um tarball chamado
lotsofdata.tar.gz
e você apenas saiba que existe um arquivo que deseja, mas tudo que você pode lembrar é que o nome dele contém a palavracontract
. Você tem duas opções:Use
tar
egrep
para listar o conteúdo do seu tarball, para descobrir o caminho completo e o nome de qualquer arquivo que corresponda à parte que você conhece e, em seguida, usetar
para extrair esse arquivo agora que você conhece os detalhes exatos ou use dois As opções pouco conhecidas apenas extraem todos os arquivos que correspondem ao pouco que você sabe sobre o nome do arquivo - você não precisa saber o nome completo ou parte do caminho dessa opção. Os detalhes são:Opção 1
Isso listará os detalhes de todos os arquivos cujos nomes contêm sua parte conhecida. Então você extrai o que deseja usando:
Você pode precisar
./
na frente do seu caminho para que ele funcione.opção 2
Depende de você que você achar mais fácil ou mais útil.
fonte
tar -xzf lotsofdata.tar.gz <full path and filename from your list above>
funcionou para mim com as nossas doações./
no início do caminho completo--wildcards
opção. Eu ainda era capaz de ter um comportamento semelhante-x -O *foo
.*foo
foi o nome do arquivo glob no meu caso, pois eu sabia que o arquivo terminava com foo.Eu estava tentando extrair algumas centenas de arquivos de um tarball com milhares de arquivos no outro dia. Os arquivos necessários não podem ser referenciados por um único curinga. Então, pesquisei no Google 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 éE funciona como um encanto.
Atualização: o arquivo de lista deve ter o mesmo formato que você veria
tar -tvf
, caso contrário, você não poderá extrair nenhum arquivo.fonte
Seu exemplo funciona para mim se você omitir o aparelho
Se o seu arquivo extract11 estiver em uma subpasta, você deve especificar o caminho dentro do tarball.
fonte
$ tar --extract --file=test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
Por favor, encontre abaixo os exemplos de extração de arquivos específicos do arquivo tar.gz.
Do arquivo local:
Do URL remoto:
fonte