Eu acho que a resposta para o seu problema são links simbólicos variantes, embora eles só existam no DragonFlyBSD até onde eu saiba (veja a pergunta anterior: links simbólicos dinâmicos )
Eu tenho uma pasta e dentro dela há muitos links.
Eu faço esses links absolutos, para que eu possa movê-los dentro da pasta e eles ainda apontam para os mesmos dados. Links relativos seriam interrompidos se eu os movesse dentro da pasta.
Mas o problema surge quando eu movo a pasta para outro sistema, digamos, um disco rígido externo ou servidor. Então todos os links absolutos têm a base errada em seu endereço.
Se fosse possível que os links tivessem uma variável em seu endereço apontando, isso resolveria esse problema.
Isso é possível?
Eu acho que a resposta para o seu problema são links simbólicos variantes, embora eles só existam no DragonFlyBSD até onde eu saiba (veja a pergunta anterior: links simbólicos dinâmicos )
O comando
symlinks -cr folder
converterá todos os links simbólicos absolutos em folder
para relativo. Assim, você pode mover a pasta inteira com os links apontando para sua localização relativa correta (supondo que todos apontem para outros arquivos em folder
)
Então, algo como ...
find folder -type l -exec echo 'LNK=$(readlink -f "{}");rm -fv "{}";ln -sv "$LNK" "{}"' ';' > xlinks
chmod +x xlinks
./xlinks
... converterá todos os links de relativo para absoluto.
(Nota: Eu desisti de tentar executar o comando diretamente do find
. De qualquer forma, ele te dá uma chance de checar o que ele vai fazer!)
Você não pode ter seu bolo e comê-lo. Os links relativos geralmente são melhores, porque você pode movê-los e copiar toda ou parte da árvore para outro local.
Se você mover um arquivo dentro da hierarquia, não está claro o que deve acontecer: se houver links a -> b
e c -> d
e você executar mv b d
, deve a
agora aponte para d
? Cabe a você decidir. Links simbólicos apontam para um local; Se você quiser apontar para um arquivo, use um link físico (isso não é possível para diretórios).
Se você mover um arquivo, mas ainda quiser encontrá-lo em seu local antigo, adicione um link simbólico do local antigo ao novo local.
Tags symlink