Como você extrai uma única pasta de um arquivo tar.gz grande?

103

Estou usando este comando em um arquivo de 5 GB

tar -zxvf archive.tar.gz /folder/in/archive

esta é a maneira correta de fazer isso? Parece estar levando uma eternidade sem saída na linha de comando ...

    
por Garrett Hall 29.03.2012 / 16:00

1 resposta

116

tar armazena os caminhos relativos por padrão . O tar GNU até diz isso se você tentar armazenar um caminho absoluto:

tar -cf foo.tar /home/foo
tar: Removing leading '/' from member names

Se você precisar extrair uma pasta específica, dê uma olhada no que está no arquivo tar:

tar -tvf foo.tar

E anote o nome exato do arquivo. No caso do meu arquivo foo.tar , eu poderia extrair /home/foo/bar dizendo:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Então, não, a maneira que você postou não é (necessariamente) a maneira correta de fazer isso. Você tem que deixar de fora a barra inicial. Se você quiser simular caminhos absolutos, faça cd / primeiro e certifique-se de ser o superusuário. Além disso, isso faz o mesmo:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

Existem razões óbvias e boas pelas quais tar converte caminhos para os relativos. Uma delas é a capacidade de restaurar um arquivo em locais diferentes da sua fonte original. O outro é segurança. Você pode extrair um arquivo, esperar que seus arquivos apareçam em seu diretório de trabalho atual e, em vez disso, sobrescrever os arquivos do sistema (ou seu próprio trabalho) por engano.

Nota: se você usar a opção -P , tar irá arquivar caminhos absolutos. Por isso, sempre vale a pena verificar o conteúdo de grandes arquivos antes de extrair.

    
por 29.03.2012 / 16:35

Tags