Por que este arquivo não está conseguindo criar links simbólicos?

3

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

Por que não está criando os links simbólicos?

$ 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
    
por Hubro 17.04.2013 / 18:20

2 respostas

4

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.

    
por 17.04.2013 / 19:11
0

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 .

    
por 07.06.2015 / 11:50