如何更改符号链接指向的位置,而不删除并创建新的符号链接(使用ln -s "/path/to/point/to" "/path/where/symlink/is"
)?
当我尝试对 Java 的“当前”符号链接执行此操作时,Java 甚至无法工作(至少从命令行,显示“段错误”),但是当我使用 Time Machine 恢复旧的“当前”符号链接时,它恢复正常(但后来我发现我应该使用它/Applications/Utilities/Java Preferences.app
来更改当前的 Java 版本)。
答案1
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 首选项实用程序更改的不仅仅是符号链接;您应该使用它来确保 Java 版本已更改。
答案2
ln -hfs newlocation existinglink
或者
ln -nfs newlocation existinglink
将更改现有链接以指向newlocation
(-n
和-h
操作相同)
从man ln
-h
如果target_file
或是target_dir
一个符号链接,则不要遵循它。这对于-f
替换可能指向目录的符号链接的选项非常有用。
-f
如果目标文件已经存在,则取消链接以便可以进行链接。(该-f
选项将覆盖任何先前的-i
选项。)
-s
创建符号链接
答案3
尝试:
unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
答案4
您是否比较过更改链接前后链接和目标上的权限?您可能只需要跟进适当的 chown 和 chmod 命令即可使其正常工作。