6

Предположим, у меня есть ссылка, которая указывает на другую ссылку, которая указывает на другую ссылку и т.д. Вниз по линии. Я не уверен, сколько уровней ссылок. Какой удобный способ командной строки увидеть конечную цель всех этих ссылок?

5 ответов5

7

Некоторые версии readlink поддерживают опцию -f чтобы следовать цепочке до конца. Тот, что на моей коробке Debian, делает. Тот, что на моем Mac OS, не имеет (но затем он переопределяется тем, что предоставляется fink, который делает).

4

Может быть, это не лучшее решение, это зависит от ваших потребностей. Вы можете получить индекс конца цепочки с помощью:

stat -Lc '%i' the-link

и если вам нужен путь к этим файлам (более одного, если концы цепочки жестко связаны друг с другом):

find /search/path/ `stat -Lc '%i' the-link`

Хорошо, есть более разумное решение:

readlink -f the-file
1

Смотрите мои ответы здесь и здесь для небольших функций, которые вы можете использовать в качестве отправной точки для выполнения того, что вы хотите, если вы хотите видеть все промежуточные ссылки.

0

Если вы хотите более кроссплатформенное решение, вы можете использовать:

#!/usr/bin/env bash
s=/path/to/file
while [ -h $s ]; do s="$(readlink "$s")"; done
echo $s

Кажется не элегантным, но, как утверждает dmckee, в Mac OS X нет опции -f на readlink .

0

Взгляните на этот скрипт на Perl, я думаю, это то, что вы ищете.

ftp://ftp.cs.duke.edu/pub/yuji/tools/reslink/reslink.pl

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .