it-swarm-pt.tech

Como faço para extrair um diretório específico de um tarball? e remover um diretório principal?

Quero extrair um diretório específico do tarball wordpress tarball. Especificamente wp-includes para .. Parece que a estrutura do diretório dentro do tarball é wordpress/wp-includes mas eu só preciso./wp-includes uma vez extraído, sem diretório inicial wordpress diretório. Como eu faria isso?

12
xenoterracide

Para extrair um diretório específico (e seu conteúdo, recursivamente), basta passá-lo como um argumento extra na linha de comando. Com GNU tar , você pode remover um diretório principal com o --strip-components opção (e mais geralmente transforma os nomes de arquivo com --transform). Em sistemas não Linux, você pode usar pax (está em POSIX, mas algumas distribuições Linux o omitem de sua instalação padrão) e seu -s opçã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 com o nome vazio (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 !.*!!
13

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

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

Eu acredito que as versões atuais do BSD tar também suportam --strip-components. Na pior das hipóteses, você poderia fazer:

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