如何在OS X中更改符号链接?


20

如何更改符号链接指向的位置,而不删除和创建新的符号链接(带有ln -s "/path/to/point/to" "/path/where/symlink/is")?

当我尝试对Java的“当前”符号链接执行此操作时,Java甚至无法工作(至少在命令行中说“ Segmentation Fault”),但是当我用Time恢复旧的“当前”符号链接时,它又恢复了正常。机器(但是后来我发现我/Applications/Utilities/Java Preferences.app还是应该使用它来更改当前的Java版本)。

Answers:


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命令不会只是将其重命名吗?
2009年

..我尝试过,它只是将新的符号链接移到旧文件指向的文件夹中。
mk12

第一个命令创建指向所需位置的符号链接,第二个命令将指向旧位置的现有指针替换为指向新位置的指针。mv是原子的,因此符号链接将始终存在。
mark4o

..但它仍然不起作用..它将新指针移动到旧指针指向的文件夹中。
09年

/path/where/symlink/is是您要更改的符号链接。使用这些命令会将其更改为/path/to/point/to。原始符号链接指向的文件夹完全没有被触摸。
mark4o

29
ln -hfs newlocation existinglink

要么

ln -nfs newlocation existinglink

将更改现有链接以指向新位置

(-n和-h在操作上是相同的)

来自“ man ln”

-h如果target_file或target_dir是符号链接,则不要跟随它。这对于-f选项最有用,用于替换可能指向目录的符号链接。

-f如果目标文件已存在,则取消链接它,以便可能发生链接。(-f选项将覆盖以前的任何-i选项。)

-s Creae一个符号链接


-nfs版本还可以在Linux上使用,因此如果有人在意,它的移植性更高。
Cromax

10

尝试:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link

1
在2013年末配备Mavericks的MacBook Pro上,我不得不切换了两个参数:ln -s / path / to / symbolic / link / path / to / target
Marius Waldal 2014年

1

ln命令不允许您更改链接,只能创建新链接。


0

在更改链接之前和之后,您是否比较了链接和目标上的权限?您可能只需要跟上适当的chown和chmod命令来使其工作即可。


好吧,我什至不知道如何更改它,所以不。而且我不知道chown和chmod会做什么。
mk12 2009年

2
chown更改文件和/或目录的所有权。chmod更改文件和/或目录的权限。这些几乎是每个Unix平台的标准配置。这里没有太多细节可以解释每一个,因此我建议您在教程中使用每个细节。您也可以执行“ man chown”或“ man chmod”来阅读命令的实际手册(按q退出手册)。
churnd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.