Для использования в shell-скрипте я ищу способ командной строки, чтобы получить назначение символической ссылки. Самое близкое, что я дошел, это то stat -N src
, что выводит src -> dst
. Конечно, я мог бы проанализировать вывод и получить dst
, но мне интересно, есть ли какой-то прямой способ получить пункт назначения.
command-line
symlink
Геррит
источник
источник
readlink -f
если вы хотите знать последнюю цель символической ссылки, а не только следующую .-f
это непереносимое расширение для GNUreadlink
.В Mac OS X и FreeBSD / NetBSD / и т. Д. его:
В более общем смысле, я думаю, что решение (stat --printf =% N использует странные кавычки):
Пример:
Другой метод:
Последняя строка искажена, потому что в ней нет новой строки, но это хорошо, если вам нужен результат в переменной, например
-maxdepth
Необходимо для предотвращенияfind
от вхождения в каталоги , еслиb
случается быть каталогом.источник
stat --printf='%N\n'
это именно то, что я хочу, странные цитаты меня не беспокоят, их те же самые цитаты rm и ln - интерактивное использованиеlink -> dest
выводится в вывод. Решение find (1) должно быть проверено, если оно с GNU findutils или иным образом ...echo $f
конечно, не дает того, что вы ожидаете, когда символическая ссылка указывает на/*
(да, это возможно)Это может быть сделано с помощью GNU
find
:find src -prune -printf "%l\n"
.источник
Портативно: не повезло, кроме использования эвристики для анализа вывода ls -l или использования
perl -le 'print readlink("some-file")'
в некоторых системах есть
readlink
команда, в некоторых есть-f
возможность получить абсолютный путь.Существуют различные реализации в
stat
команде в качестве обертки дляstat
/lstat
системных вызовов. GNU one бесполезен в этом отношении, но встроенный в zsh больше:Тем не менее, с zsh вы можете получить абсолютный путь к файлу (удаляет каждый компонент символической ссылки) с
:A
модификатором (применяется к раскрытию переменных, расширению истории и глобализации:источник
В системе, где у меня нет команд
readlink
илиstat
команд, но у меня есть Python 2.x, я использую короткий скрипт:Обратите внимание, что в отличие от
readlink -f
этого может следовать только один уровень символической ссылки.источник
Портативный чистый Bash RealPath
источник
realpath
командаcoreutils
пакета,как указано
readlink
на странице руководства команды.например:
выходы
на моей машине.
источник