Como extrair uma única pasta e suas subpastas de um “tarball” (.tar.gz)

4

Eu preciso extrair uma única pasta e suas subpastas de um tarball ( .tar.gz ) em um servidor CentOS. Eu não tenho a menor idéia de como fazê-lo usando um terminal SSH.

Eu tentei:

gunzip -c files_20100623.0110.tar.gz | tar -xvf home/bsisplas/public_html/staging/template/*.*

No entanto, não parece encontrar o arquivo no arquivo. Além disso, onde na sintaxe gunzip você especifica para onde os arquivos extraídos devem ir? Eu sou um noob do terminal Linux para dizer o mínimo.

    
por mikey1980 23.06.2010 / 18:18

2 respostas

6

Primeiro, quando você usa a opção -f para tar , você precisa dar um argumento dizendo o nome do arquivo. Como você está alimentando a partir de um pipe de gunzip , usamos - para indicar a entrada padrão:

gunzip -c files_20100623.0110.tar.gz | tar -xvf - home/bsisplas/public_html/staging/template/*.*

Meu próximo ponto seria que você só precisa fornecer o nome do diretório. (Também: *.* é normalmente um DOS-ismo. Se você quer dizer "todos os arquivos" no Unix, escreva * . Se você escreve *.* você está dizendo "todos os arquivos com um ponto em algum lugar no nome" que poderia excluir arquivos importantes sem um ponto, como Makefile ou README ):

gunzip -c files_20100623.0110.tar.gz | tar -xvf - home/bsisplas/public_html/staging/template

Isso deve funcionar. Mas você pode tornar as coisas um pouco mais fáceis usando a opção tar , que diz para fazer o -z em si. Usamos isso e substituímos o nome do arquivo gunzip input pelo nome do arquivo:

tar -xvzf files_20100623.0110.tar.gz home/bsisplas/public_html/staging/template

Como isso funciona?

    
por 23.06.2010 / 18:29
3

Tudo que você precisa é tar. Você pode obter uma lista de arquivos no tarball com a opção -t e, em seguida, extrair como normal, mas com o caminho do arquivo como um argumento final: tar zxvf foo.tar.gz filepath

    
por 23.06.2010 / 18:25