Tl; dr
Como você já está em /tmp
, é possível descartar a opção -C
(já que por padrão tar
extrairá arquivos no diretório de trabalho atual) e apenas --strip-components=2
:
tar --strip-components=2 -xfvz archive.tar.gz folder/in/archive
O GNU tar
por padrão armazena os caminhos relativos.
Se um arquivo usa caminhos relativos pode ser verificado executando tar -tf archive | head -n 1
, que irá imprimir o caminho do primeiro arquivo no arquivo; Se o caminho desse arquivo é um caminho relativo, todos os arquivos no arquivo usam caminhos relativos:
% tar -tf bash-4.3.tar.gz | head -n 1
bash-4.3/
Para extrair um único arquivo / pasta de um arquivo que use caminhos relativos sem seus ancestrais em um caminho relativo, você precisará de duas opções: -C
e --strip-components=N
: no exemplo abaixo, o arquivo bash-4.3.tar.gz
usa relativo caminhos e contém um arquivo bash-4.3/doc/bash.html
que é extraído em um caminho relativo path
( -C
especifica o diretório no qual os arquivos serão extraídos, --strip-components=2
especifica que o pai e o pai do pai dos arquivos extraídos devem ser ignorado, então, neste caso, apenas bash.html
será extraído para o diretório de destino):
% tree
.
├── bash-4.3.tar.gz
└── path
1 directory, 1 file
% tar -tf bash-4.3.tar.gz | grep -F 'bash.html'
bash-4.3/doc/bash.html
% tar -C path --strip-components=2 -zxf bash-4.3.tar.gz bash-4.3/doc/bash.html
% tree
.
├── bash-4.3.tar.gz
└── path
└── bash.html
1 directory, 2 files
Então, de volta ao seu comando, como você já está em /tmp
, você pode descartar a opção -C
(já que por padrão tar
extrairá arquivos no diretório de trabalho atual) e apenas --strip-components=2
:
tar --strip-components=2 -xfvz archive.tar.gz folder/in/archive