Чтобы изменить символическую ссылку, можно использовать опцию -fs, чтобы устранить необходимость сначала отключить или удалить старую ссылку. Однако попытка сделать это в каталогах не работает:
$ mkdir dir1
$ mkdir dir2
$ ln -s dir1 lnk
$ ln -sf dir2 lnk
$ ll
......... lnk -> dir1
$
Почему? Есть ли другой вариант сделать это с каталогами, такими же, как с файлами?
По умолчанию, если вы передадите директорию (или символическую ссылку на каталог) в качестве второго аргумента в команду ln, она создаст ссылку внутри этого каталога с тем же именем, что и первый аргумент. Таким образом, с набором команд, которые вы выпустили, вы должны найти символическую ссылку с именем dir2 внутри dir1.
Вы можете изменить это поведение, используя опцию -T:
-T, --no-target-directory
treat LINK_NAME as a normal file
Если вы передадите этот параметр во втором вызове ln, то он должен перезаписать символическую ссылку lnk, а не создавать новую символическую ссылку внутри первого каталога.