Como encontrar o arquivo original de um link suave?

6

Por exemplo, tenho um arquivo a e faço o seguinte.

ln -s a b
ln -s b c
ln -s c d

Se eu usar readlink d , receberei c . Então eu tenho que correr muitas vezes para obter a .

Existe uma maneira fácil de obter a ?

Atualização:

Se eu quiser localizar o arquivo original de /usr/bin/java , preciso fazer isso várias vezes para obter /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java . Os arquivos e links não estão na mesma pasta.

    
por eccstartup 07.11.2013 / 04:04

4 respostas

7

O comando para seguir cadeias de links é denominado namei ManPage Exemplos:

$ touch a
$ ln -s a b
$ ln -s b c
$ ln -s c d
$ namei ./d
f: ./d
 d .
 l d -> c
   l c -> b
     l b -> a
       - a
$ namei /usr/bin/java
f: /usr/bin/java
 d /
 d usr
 d bin
 l java -> /etc/alternatives/java
   d /
   d etc
   d alternatives
   l java -> /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java
     d /
     d usr
     d lib
     d jvm
     d java-7-openjdk-i386
     d jre
     d bin
     - java
    
por Nykakin 08.11.2013 / 00:22
2

Você pode usar a seguinte função de shell:

readmultilink () {
    linkfile=""
    if [ ! -L "$linkfile" ]; then 
        echo "$linkfile is not a simbolik link" >&2
        return 1
    fi
    until [ ! -L "$linkfile" ]; do
        lastlinkfile="$linkfile"
        linkfile=$(readlink "$lastlinkfile")
    done
    readlink "$lastlinkfile"
}

Adicione esta função no final do seu arquivo ~/.bashrc se você quiser usá-lo toda vez que abrir o terminal.

Uso:

readmultilinks file_name

Como exemplo, para o seu exemplo, readmultilinks d , readmultilinks c e readmultilinks b retornarão a , mas readmultilinks a retornará a is not a simbolik link .

    
por Radu Rădeanu 07.11.2013 / 08:38
1

Você talvez precise encontrar:

$ find -L . -samefile d
./b
./c
./d
./a

Ou:

$ ls -i d
143075 d
$ find . -follow -print -inum 143075
.
./b
./c
./d
./a

Ambos os casos, o arquivo original é o último.

    
por Braiam 07.11.2013 / 05:00
1

Uma solução simples:

readlink -f /path/to/file
    
por kiri 30.01.2014 / 21:55