Vamos supor que eu tenha um arquivo e um diretório:
$ ls -l
total 4
drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir
-rw-rw-r--. 1 user user 0 Oct 8 09:53 file
Eu criei um link simbólico para file
chamado symlink1
e um link simbólico para dir
chamado dirslink1
:
$ ls -l
drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir
lrwxrwxrwx. 1 user user 3 Oct 8 10:03 dirslink1 -> dir
-rw-rw-r--. 5 user user 0 Oct 8 09:53 file
lrwxrwxrwx. 1 user user 4 Oct 8 09:53 symlink1 -> file
Agora eu criei links simbólicos para symlink1
usar ln -s
e ln -sL
:
$ ln -s symlink1 symlink2
$ ln -sL symlink1 symlink3
$ ln -s dirslink1 dirslink2
$ ln -sL dirslink1 dirslink3
Agora, tanto quanto eu entendo, symlink3
deve apontar para file
e dirslink3
deve apontar para dir
. Mas quando eu verifico, nenhum symlink[23]
e dirslink[23]
aponta para o arquivo ou diretório original:
$ ls -l
drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir
lrwxrwxrwx. 1 user user 3 Oct 8 10:03 dirslink1 -> dir
lrwxrwxrwx. 1 user user 9 Oct 8 10:03 dirslink2 -> dirslink1
lrwxrwxrwx. 1 user user 9 Oct 8 10:03 dirslink3 -> dirslink1
-rw-rw-r--. 5 user user 0 Oct 8 09:53 file
lrwxrwxrwx. 1 user user 4 Oct 8 09:53 symlink1 -> file
lrwxrwxrwx. 1 user user 8 Oct 8 09:54 symlink2 -> symlink1
lrwxrwxrwx. 1 user user 8 Oct 8 09:54 symlink3 -> symlink1
A pergunta é: é possível/como crio um link simbólico para o arquivo original usando outro link simbólico?
-L
só funciona com links físicos; conforme especificado em POSIX :Se você tiver
readlink
, pode usar isso:Se você
readlink
suporta a-f
opção, você pode usar isso para canonizar totalmente o alvo ( ou seja, resolver todos os links simbólicos no caminho do destino, se o link simbólico de destino incluir outros links simbólicos).Você pode usar
cp -P
para fazer uma cópia de um link simbólico:(assumindo
symlink3
que ainda não existe como um diretório ou link simbólico para o diretório, veja a-T
opção com GNUcp
para esses casos).Esteja ciente de que, se o destino do link simbólico for relativo, o acima provavelmente resultaria em um link quebrado se a cópia não estiver no mesmo diretório que o original.
Com
zsh
,Criaria
symlink3
como um link simbólico para o caminho canônico completo (sem link simbólico) desymlink2
, como,ln -s -- "$(readlink -f symlink2)" symlink3
mas mais confiável, pois ainda funcionaria corretamente se esse caminho terminasse em caracteres de nova linha.Mesma ressalva acima e mesmo trabalho com GNU
ln
.