9

Если у меня есть символическая ссылка /var/opt/foo созданная с помощью ln -fs /path/to/target/dir foo . Как я могу в скрипте, который видит только ссылку get /path/to/target/dir?

То, чего я хочу добиться в этом скрипте, это rm -rf /path/to/target/dir прежде чем я выполню ln -fs /path/to/another/dir foo .

2 ответа2

25
link=/var/opt/foo

target=$(readlink "$link")

$target теперь является целью ссылки в точности так, как она была сохранена в файловой системе.

Тем не менее, символические ссылки могут быть относительными, так что это было бы лучше для обычного использования:

target=$(readlink -f "$link")

Обратите внимание, что здесь используется readlink из GNU Coreutils, который может отсутствовать в BSD и других системах.

Изменить: readlink -f работает на BSD, пока существует цель ссылки. realpath - еще один, только для BSD, инструмент, который работает аналогичным образом.

0

Один из способов (я надеюсь на лучшую версию)

olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"

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