Как изменить символическую ссылку в OS X?

20

Как мне изменить ссылку на символическую ссылку, не удаляя и не создавая новую (с помощью ln -s "/path/to/point/to" "/path/where/symlink/is")?

Когда я попытался сделать это с символьной ссылкой «Текущий» в Java, Java даже не работал (по крайней мере, из командной строки сказал «Ошибка сегментации»), но все восстановилось, когда я восстановил старую символическую ссылку «Текущий» со временем. Машина (но позже я узнал, что в /Applications/Utilities/Java Preferences.appлюбом случае я должен использовать текущую версию Java).

Mk12
источник

Ответы:

8
mkdir /path/where/newsymlink
ln -s /path/to/point/to /path/where/newsymlink/is
mv /path/where/newsymlink/is /path/where/symlink/
rmdir /path/where/newsymlink

Однако утилита Java Preferences изменяет не только символическую ссылку; Вы должны использовать это, чтобы гарантировать, что версия Java изменена.

mark4o
источник
команда mv просто не переименовала бы это ..?
mk12
.. Я пытался это, это просто перемещает новую символическую ссылку в папку, на которую указывает старая.
mk12
Первая команда создает символическую ссылку, указывающую, где вы хотите, а вторая команда заменяет существующий указатель на старое место указателем на новое место. Mv является атомарной, поэтому символическая ссылка всегда будет существовать.
mark4o
.. но он все равно не работает .. он перемещает новый указатель в папку, на которую указывает старый.
mk12
/path/where/symlink/isсимволическая ссылка, которую вы меняете Использование этих команд изменит это, чтобы указать /path/to/point/to. Папка, на которую указывает исходная символическая ссылка, вообще не затрагивается.
mark4o
29
ln -hfs newlocation existinglink

или

ln -nfs newlocation existinglink

изменит существующую ссылку, чтобы указать на новое местоположение

(-n и -h идентичны в действии)

Из "Человек LN"

-h Если target_file или target_dir является символической ссылкой, не переходите по ней. Это наиболее полезно с опцией -f, чтобы заменить символическую ссылку, которая может указывать на каталог.

-f Если целевой файл уже существует, отсоедините его, чтобы ссылка могла появиться. (Параметр -f отменяет все предыдущие параметры -i.)

Crea символическая ссылка

Maxxx
источник
-nfsВерсия работает также на Linux, так что это более портативными , если кто -то заботится.
Cromax
10

Пытаться:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
соринка
источник
1
На моем конце 2013 MacBook Pro с Mavericks мне пришлось переключить два параметра: ln -s / path / to / symbolic / link / path / to / target
Мариус Вальдал
1

Команда ln не позволяет вам менять ссылки, а только создавать новые.

Mk12
источник
0

Вы сравнивали разрешения для ссылок и целей до и после изменения ссылки? Возможно, вам просто нужно выполнить соответствующие команды chown и chmod, чтобы все заработало.

мистифицировать
источник
Ну, я даже не знаю, как это изменить, так что нет. И я не знаю, что делают chown и chmod.
mk12
2
chown меняет владельца файла и / или каталога. chmod изменяет права доступа к файлу и / или каталогу. Они стандартны практически для каждой платформы Unix. Слишком много подробностей, чтобы объяснить каждое из них здесь, поэтому я бы порекомендовал поискать каждого из них в учебниках. Вы также можете выполнить «man chown» или «man chmod», чтобы прочитать собственное руководство по команде (нажмите q, чтобы выйти из руководства).
суббота