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

Estou usando este comando em um 5 GB arquivo

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

esta é a maneira correta de fazer isso? Parece estar demorando uma eternidade sem saída de linha de comando …

Comentários

  • Você usou um caminho absoluto ou relativo? Deve ser relativo, exceto que parece certo. Por quanto tempo você o deixou funcionar e quão bom é o seu sistema? Levará pelo menos vários minutos em uma máquina rápida. Potencialmente uma hora ou mais? Eu ' estou executando um teste agora.
  • Sim, foi concluído após cerca de 1 hora, mas o caminho absoluto estava errado, você estava certo.
  • No Linux, você pode observar a distância do arquivo tar com cat /proc/$(pidof tar)/fdinfo/0 (adapte o comando se tiver mais de um tar processo em execução).
  • A parte importante também é não haver nenhuma barra final. Usar folder/folder2/ ganhou ' t trabalho.

Resposta

tar armazena caminhos relativos por padrão . GNU tar 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á dentro o arquivo tar:

tar -tvf foo.tar 

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

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

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

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

Existem boas e óbvias razões pelas quais tar converte caminhos em caminhos relativos. Uma é a capacidade de restaurar um arquivo em locais diferentes de sua fonte original. outra é a 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 arquivos de sistema (ou seu próprio trabalho) em outro lugar por engano.

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

Comentários

  • --strip-components=N pode ser útil para alguns aqui.
  • no meu caso, foi necessário escrever ./foldername/ em vez de , acho que foi porque quando criei o tar, eu o criei com tar -cvf santi.tar ./* e quando " listou " o alcatrão, é o que está escrito drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • E sobre .gz?
  • @PeterKrauss altere -xvf para -xzvf (adicionando o -z) e obviamente foo.tar a foo.tar.gz ou qualquer que seja o nome do seu arquivo. O mesmo se aplica a -j (bz2) e em algumas versões recentes, -J (xz). Caso contrário, um pipeline como zcat foo.tar.gz | tar -xvf - … também funciona.
  • E lembre-se, se você está cansado de toda a saída detalhada durante a extração, basta ignorar v em todos os exemplos. Por exemplo, tar -tf foo.tar e tar -xf foo.tar ....

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *