Как найти оригинальный файл софт-ссылки?

Например, у меня есть файл a, и я делаю следующее.

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

Если я использую readlink d, я получу c. Поэтому мне нужно бежать много раз, чтобы получить a.

Есть ли простой способ получить a?

Обновление:

Если я хочу найти исходный файл /usr/bin/java, я должен сделать это много раз, чтобы получить /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java. Файлы и ссылки не находятся в одной папке.

6
задан 13 December 2013 в 23:57

4 ответа

Вы можете использовать следующую функцию оболочки:

readmultilink () {
    linkfile="$1"
    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"
}

Добавьте эту функцию в конец файла ~/.bashrc, если хотите использовать ее каждый раз, когда открываете терминал.

Использование:

readmultilinks file_name

Например, для вашего примера readmultilinks d, readmultilinks c и readmultilinks b вернет a, но readmultilinks a вернет a is not a simbolik link.

0
ответ дан 13 December 2013 в 23:57

Простое решение:

readlink -f /path/to/file
0
ответ дан 13 December 2013 в 23:57

Команда для следующих цепочек ссылок называется namei ManPage . Примеры:

$ 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
0
ответ дан 13 December 2013 в 23:57

Возможно, вам нужно найти вместо:

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

Или:

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

В обоих случаях исходный файл является последним.

0
ответ дан 13 December 2013 в 23:57

Другие вопросы по тегам:

Похожие вопросы: