Algumas versões de readlink
suportam a opção -f
para acompanhar a cadeia até o final. O que está na minha caixa Debian faz. O que está na minha caixa do Mac OS não (mas, então, ele é substituído por um fornecido pelo fink).
Suponha que eu tenha um link que aponte para outro link que aponte para outro link, etc., abaixo da linha. Não tenho certeza de quantos níveis de links existem. Qual é o caminho da linha de comando para ver o alvo final de todos esses links?
Talvez não seja a melhor solução, depende das suas necessidades. Você pode recuperar o inode do final da cadeia com:
stat -Lc '%i' the-link
e se você precisar do caminho desses arquivos (mais de um se as extremidades da cadeia estiverem ligadas entre si):
find /search/path/ 'stat -Lc '%i' the-link'
Ok, há uma solução mais inteligente:
readlink -f the-file
Dê uma olhada neste script perl, acho que é o que você está procurando.
ftp://ftp.cs.duke.edu/pub/yuji/tools /reslink/reslink.pl
Se você deseja mais uma solução multiplataforma, use:
#!/usr/bin/env bash
s=/path/to/file
while [ -h $s ]; do s="$(readlink "$s")"; done
echo $s
Parece deselegante, mas, como afirma o dmckee, o Mac OS X não tem a opção -f
em readlink
.