O comentário de BloodPhilia disse tudo. Eu não considerei o fato de que estou trabalhando em uma pasta compartilhada VMware a partir de uma máquina Windows com partições NTFS. Extrair o arquivo em qualquer lugar da máquina virtual funciona bem.
Quando eu extraio o arquivo Symfony_Standard_2.2.1.tgz usando este comando:
$ tar xzf /home/tomas/downloads/Symfony_Standard_2.2.1.tgz
Eu sempre recebo os erros:
tar: doctrine.php: Cannot create symlink to '../vendor/doctrine/orm/bin/doctrine.php': Operation not supported tar: doctrine: Cannot create symlink to '../vendor/doctrine/orm/bin/doctrine': Operation not supported tar: Exiting with failure status due to previous errors
$ tar --version tar (GNU tar) 1.23 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by John Gilmore and Jay Fenlason.
$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 6.0.7 (squeeze) Release: 6.0.7 Codename: squeeze
O comentário de BloodPhilia disse tudo. Eu não considerei o fato de que estou trabalhando em uma pasta compartilhada VMware a partir de uma máquina Windows com partições NTFS. Extrair o arquivo em qualquer lugar da máquina virtual funciona bem.
Estou chegando um pouco atrasado para essa festa, mas tive o mesmo problema ontem. Se o sistema de arquivos não suportar links simbólicos e você quiser que todo o conteúdo do arquivo seja acessível, pode ser uma solução para copiar esses arquivos (que devem ser ligados por links simbólicos).
O arquivo que eu queria extrair tinha mais de 20 links simbólicos, então decidi gerar os comandos cp
por um script. Eu só preciso fornecer a saída stderr
de tar
(por meio de um arquivo por tar ... 2> /tmp/tar-stderr.txt
) e a pasta de destino. Eu decidi ainda não executar os comandos cp
, mas canalizá-los para um arquivo que eu possa verificar antes de eu chmod +x
e executá-lo. Sinta-se à vontade para melhorar o script, canalizar o tar diretamente para ele (por exemplo, trocando stdout
/ stderr
), use de alguma forma tee
para fornecer as mensagens ignoradas de tar
...
#!/bin/sh
(export DIR=/your/extraction/target/directory; echo \#\!/bin/sh -e; cat /tmp/tar-stderr.txt | grep 'Cannot create symlink to' | sed -e 's7^tar: \.\([^:]\+\): Cannot create symlink to .\([^:]\+\).*$7:' -e "s7^\(.\+\)/\([^:]\+\):\(.\+\).\cd $DIR \&\& cp ;7")
EDIT: Explicação do script adicionado:
O grep
filtra as linhas de interesse.
Meus comandos sed
são simples, mas use 7
como delimitador de campo em vez do comum /
. Com isso eu posso pesquisar e / ou escrever /
.
A primeira expressão sed
filtra as informações relevantes (caminho relativo e os 2 nomes de arquivos) e coloca um :
como delimitador. O segundo distingue o nome do arquivo do caminho e joga fora o '
no final; a saída final é então um comando cp
.
Tags symbolic-link tar debian