Как изменить символическую ссылку в 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.