Como extrair um diretório específico de um tarball? e tira um diretório principal?


12

Eu quero extrair um diretório específico do tarball wordpress. especificamente wp-includespara .. Parece que a estrutura de diretórios dentro do tarball é, wordpress/wp-includesmas eu só preciso, ./wp-includesuma vez extraída, nenhum diretório principal do wordpress. Como eu faria isso?

Respostas:


13

Para extrair um diretório específico (e seu conteúdo, recursivamente), apenas passe-o como um argumento extra na linha de comando. Com o GNU tar , você pode remover um diretório principal com a --strip-componentsopção (e mais geralmente transformar os nomes dos arquivos --transform). Em sistemas não Linux, você pode usar o pax (está no POSIX, mas algumas distribuições do Linux o omitem da instalação padrão) e sua -sopção.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Você pode mesclar a lista de inclusão com as regras de reescrita anexando uma regra para reescrever tudo no nome vazio (o que significa "não extrair"; a regra só se aplica se as regras anteriores não corresponderem).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

Supondo que você tenha o GNU tar, você pode usar --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Acredito que as versões atuais do tar BSD também suportem --strip-components. Na pior das hipóteses, você pode fazer:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

Acabei fazendo o último só porque com pressa, mas é bom saber que o primeiro existe.
Xenoterracide

Seria possível usar um comando que não requer nomear explicitamente o componente removido (por exemplo wordpress)? Preciso disso ao extrair tarballs criados pelo GitHub que contêm a revisão git no componente despojado que eu não conheço antecipadamente.
tjanez
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.