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

11

Eu quero extrair um diretório específico do tarball do wordpress. especificamente wp-includes to . . Parece que a estrutura de diretório dentro do tarball é wordpress/wp-includes , mas eu só preciso de ./wp-includes depois de ter sido extraído, nenhum diretório wordpress principal. Como eu faria isso?

    
por xenoterracide 05.11.2010 / 08:51

2 respostas

12

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 opção --strip-components (e mais geralmente Transforme os nomes dos arquivos com --transform ). Em sistemas não-Linux, você pode usar pax (é em POSIX, mas algumas distribuições Linux omitem da sua instalação padrão) e sua opção -s .

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 regravação, acrescentando uma regra para reescrever tudo ao 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/\)!!' -s !.*!!
    
por 05.11.2010 / 12:36
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 BSD também suportam --strip-components . No pior dos casos, você poderia fazer:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress
    
por 05.11.2010 / 10:08

Tags