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


20

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

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

Ответы:


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 изменена.


команда 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 символическая ссылка


-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 не позволяет вам менять ссылки, а только создавать новые.


0

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


Ну, я даже не знаю, как это изменить, так что нет. И я не знаю, что делают chown и chmod.
mk12

2
chown меняет владельца файла и / или каталога. chmod изменяет права доступа к файлу и / или каталогу. Они стандартны практически для каждой платформы Unix. Слишком много подробностей, чтобы объяснить каждое из них здесь, поэтому я бы порекомендовал поискать каждого из них в учебниках. Вы также можете выполнить «man chown» или «man chmod», чтобы прочитать собственное руководство по команде (нажмите q, чтобы выйти из руководства).
суббота
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.