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

23657
mk12

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

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

12

5 ответов на вопрос

15
Maxxx
ln -hfs newlocation existinglink 

или же

ln -nfs newlocation existinglink 

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

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

Из "человека"

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

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

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

10
mote

Пытаться:

unlink /path/to/current/link ln -s /path/to/target /path/to/symbolic/link 
На моем конце 2013 MacBook Pro с Mavericks мне пришлось переключить два параметра: ln -s / path / to / symbolic / link / path / to / target Marius Waldal 10 лет назад 1
6
mark4o
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 14 лет назад 0
.. Я пытался это, это просто перемещает новую символическую ссылку в папку, на которую указывает старая. mk12 14 лет назад 0
Первая команда создает символическую ссылку, указывающую, где вы хотите, а вторая команда заменяет существующий указатель на старое место указателем на новое место. Mv атомарная, поэтому символическая ссылка будет существовать всегда. mark4o 14 лет назад 0
.. но он все еще не работает .. он перемещает новый указатель в папку, на которую указывает старый. mk12 14 лет назад 0
`/ path / where / symlink / is` - это символическая ссылка, которую вы меняете. Использование этих команд изменит его так, чтобы оно указывало на `/ path / to / point / to`. Папка, на которую указывает исходная символическая ссылка, вообще не затрагивается. mark4o 14 лет назад 0
Команда mv не позволяет заменить старый на новый, она перемещает новый в старый (в папку, на которую указывает). Я пробовал несколько раз. mk12 14 лет назад 0
@ Mk12: Вы должны дать новому то же имя, что и старое. Таким образом, это должно перезаписать это. Sasha Chedygov 14 лет назад 0
Я сделал, но это не так. Он перемещает его в каталог, на который указывает. mk12 14 лет назад 0
@ Mk12: Извините, вы правы. Я исправил свой ответ, чтобы справиться с этим, хотя теперь это 4 команды вместо 2 ... :-( mark4o 14 лет назад 0
Этим инструкциям очень трудно следовать. mk12 14 лет назад 0
Это просто перемещение новой ссылки поверх старой. Mkdir / rmdir просто существует, потому что «mv x y» переименовывает x в y / x вместо y, если y является каталогом или ссылкой на каталог. Если бы у mv была возможность подавить это поведение, то это было бы проще. mark4o 14 лет назад 0
1
mk12

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

0
Josh

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

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