Предположим, у меня есть ссылка, которая указывает на другую ссылку, которая указывает на другую ссылку и т.д. Вниз по линии. Я не уверен, сколько уровней ссылок. Какой удобный способ командной строки увидеть конечную цель всех этих ссылок?
5 ответов
Некоторые версии readlink
поддерживают опцию -f
чтобы следовать цепочке до конца. Тот, что на моей коробке Debian, делает. Тот, что на моем Mac OS, не имеет (но затем он переопределяется тем, что предоставляется fink, который делает).
Может быть, это не лучшее решение, это зависит от ваших потребностей. Вы можете получить индекс конца цепочки с помощью:
stat -Lc '%i' the-link
и если вам нужен путь к этим файлам (более одного, если концы цепочки жестко связаны друг с другом):
find /search/path/ `stat -Lc '%i' the-link`
Хорошо, есть более разумное решение:
readlink -f the-file
Если вы хотите более кроссплатформенное решение, вы можете использовать:
#!/usr/bin/env bash
s=/path/to/file
while [ -h $s ]; do s="$(readlink "$s")"; done
echo $s
Кажется не элегантным, но, как утверждает dmckee, в Mac OS X нет опции -f
на readlink
.
Взгляните на этот скрипт на Perl, я думаю, это то, что вы ищете.