Mantenha o rastreamento de links simbólicos?

4

Eu uso links simbólicos com bastante frequência, mas depois de mover o arquivo original, perco a noção do link simbólico. Eu também uso links simbólicos para manter o controle de alguns arquivos no mesmo diretório, mas, novamente, eu perdi a noção.

  • Existe alguma maneira (ferramenta / método) de acompanhar o link simbólico, independentemente da alteração que eu faça? O hard link é o único caminho para isso?
  • Existe alguma maneira de tornar o link simbólico de maneira relativa, de modo que, quando eu mover o diretório que contém o original e o link, o link funcione.
por prosseek 09.09.2010 / 17:51

2 respostas

7

Concerando sua segunda pergunta, se você fizer o symlink usando um caminho relativo e, em seguida, mover toda a estrutura de diretórios, ainda assim deverá funcionar. Considere a seguinte sessão de terminal:

~$ mkdir test
~$ cd test/
~/test$ mkdir test2
~/test$ cd test2/
~/test/test2$ touch testfile; echo "hello, world" > testfile
~/test/test2$ cat testfile 
hello, world
~/test/test2$ cd ..
~/test$ ln -s ./test2/testfile testfileln
~/test$ ls -l
total 8
drwxr-xr-x 2 xxxx xxxx 4096 2010-09-09 09:18 test2
lrwxrwxrwx 1 xxxx xxxx   16 2010-09-09 09:18 testfileln -> ./test2/testfile
~/test$ cd ..
~$ mv test/ testfoo
~$ cd testfoo/
~/testfoo$ ls -l
total 8
drwxr-xr-x 2 xxxx xxxx 4096 2010-09-09 09:18 test2
lrwxrwxrwx 1 xxxx xxxx   16 2010-09-09 09:18 testfileln -> ./test2/testfile
/testfoo$ cat testfileln 
hello, world

Quanto à sua primeira pergunta, se você realmente quiser um link que se refira ao mesmo arquivo, não importa o que você faça com o local original do arquivo, um link físico provavelmente é o que você deseja. Um link físico é basicamente apenas outro nome que se refere ao mesmo inode. Assim, não há diferença entre o link físico e o "arquivo original". No entanto, se você precisar vincular vários sistemas de arquivos, os links físicos geralmente não funcionam e geralmente não é possível criar links físicos para diretórios. Além disso, você notará algumas diferenças ao executar algumas operações de arquivo. Mais notavelmente, a remoção do original não removerá o arquivo. O link físico ainda apontará para o arquivo e estará acessível.

    
por 09.09.2010 / 18:40
2

Você pode usar o comando readlink para descobrir / verificar o que um link (agora quebrado) apontou originalmente e, em seguida, corrigi-lo para apontar para qualquer novo nome / localização do arquivo. Ou você poderia renomear seu arquivo apenas por meio de um script de shell que renomeia um arquivo e procura e corrige todos os links que apontam para ele. De qualquer maneira, você faria algo assim:

find . -type l | while read L
do
    if readlink $L | grep -q "^$OLDNAME\$"
    then
        ln -sf $NEWNAME $L
    fi
done

No entanto, se você estiver fazendo isso o tempo todo, os links simbólicos provavelmente não serão o que você deve usar.

    
por 11.09.2010 / 00:30