Você usou um caminho absoluto ou relativo? Deve ser relativo, diferente do que parece certo. Por quanto tempo você o deixou funcionar e qual o seu sistema? Levará pelo menos alguns minutos em uma máquina rápida. Potencialmente uma hora ou mais? Estou executando um teste agora.
21412 Kevin
Sim, foi concluído após ~ 1 hora, mas o caminho absoluto estava errado, você estava correto.
Garrett Hall
5
No Linux, você pode assistir o quão longe no arquivo taré com cat /proc/$(pidof tar)/fdinfo/0(adaptar o comando se você tiver mais de um tarprocesso em execução).
Gilles
A parte importante também não é barra final. Usar folder/folder2/não funcionará.
Marki555
Respostas:
145
tararmazena caminhos relativos por padrão . O tar do GNU 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, veja o que está no arquivo tar:
tar -tvf foo.tar
E anote o nome do arquivo exato. No caso do meu foo.tararquivo, eu poderia extrair /home/foo/bardizendo:
tar -xvf foo.tar home/foo/bar # Note: no leading slash
Portanto, não, a maneira como você postou não é (necessariamente) a maneira correta de fazê-lo. Você tem que deixar de fora a barra principal. Se você deseja simular caminhos absolutos, faça cd /primeiro e verifique se você é 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 muito óbvias e boas pelas quais tarconverte caminhos em caminhos relativos. Uma é a capacidade de restaurar um arquivo em outros locais que não sua fonte original. O outro é segurança. Você pode extrair um arquivo morto, esperar que seus arquivos apareçam no seu diretório de trabalho atual e substituir os arquivos do sistema (ou seu próprio trabalho) em outro lugar por engano.
Nota: se você usar a -Popção, tarirá arquivar caminhos absolutos. Por isso, sempre vale a pena verificar o conteúdo de grandes arquivos antes de extrair.
--strip-components=Npode ser útil para alguns aqui.
Acumenos
2
no meu caso, era necessário escrever ./foldername/em vez de foldername, eu acho que era porque quando eu criei o alcatrão que eu criei com tar -cvf santi.tar ./*e quando eu "listados" o alcatrão é isso que ele dissedrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago Arizti
11
E sobre .gz?
Peter Krauss
11
O @PeterKrauss muda -xvfpara -xzvf(adicionando a -zopção) e obviamente foo.tarpara foo.tar.gzou o nome do seu arquivo. O mesmo vale para -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.
Alexios #
E lembre-se, se você está cansado de toda a saída detalhada durante a extração, pule a vem todos os exemplos. Por exemplo, tar -tf foo.tare tar -xf foo.tar ....
tar
é comcat /proc/$(pidof tar)/fdinfo/0
(adaptar o comando se você tiver mais de umtar
processo em execução).folder/folder2/
não funcionará.Respostas:
tar
armazena caminhos relativos por padrão . O tar do GNU diz isso se você tentar armazenar um caminho absoluto:Se você precisar extrair uma pasta específica, veja o que está no arquivo tar:
E anote o nome do arquivo exato. No caso do meu
foo.tar
arquivo, eu poderia extrair/home/foo/bar
dizendo:Portanto, não, a maneira como você postou não é (necessariamente) a maneira correta de fazê-lo. Você tem que deixar de fora a barra principal. Se você deseja simular caminhos absolutos, faça
cd /
primeiro e verifique se você é o superusuário. Além disso, isso faz o mesmo:Existem razões muito óbvias e boas pelas quais
tar
converte caminhos em caminhos relativos. Uma é a capacidade de restaurar um arquivo em outros locais que não sua fonte original. O outro é segurança. Você pode extrair um arquivo morto, esperar que seus arquivos apareçam no seu diretório de trabalho atual e substituir os arquivos do sistema (ou seu próprio trabalho) em outro lugar por engano.Nota: se você usar a
-P
opção,tar
irá arquivar caminhos absolutos. Por isso, sempre vale a pena verificar o conteúdo de grandes arquivos antes de extrair.fonte
--strip-components=N
pode ser útil para alguns aqui../foldername/
em vez defoldername
, eu acho que era porque quando eu criei o alcatrão que eu criei comtar -cvf santi.tar ./*
e quando eu "listados" o alcatrão é isso que ele dissedrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
.gz
?-xvf
para-xzvf
(adicionando a-z
opção) e obviamentefoo.tar
parafoo.tar.gz
ou o nome do seu arquivo. O mesmo vale para-j
(bz2) e em algumas versões recentes,-J
(xz). Caso contrário, um pipeline comozcat foo.tar.gz | tar -xvf - …
também funciona.v
em todos os exemplos. Por exemplo,tar -tf foo.tar
etar -xf foo.tar ...
.