将旧的符号链接定向到不同的位置

将旧的符号链接定向到不同的位置

例子:

我使用以下命令创建了一个到 /usr/local/bin 文件夹的符号链接

sudo ln -s ~/Desktop/package/Application/tool1
sudo ln -s ~/Desktop/package/Application/tool2

我想将我的应用程序文件夹(及其所有工具)移动到 /package/Application (基本上位于 Users 父目录之外)。是否可以让原始符号链接指向新位置中相应的工具?

答案1

不会。符号链接将继续指向同一位置并变为悬空符号链接。要使它们指向新位置,您可以删除它们并正确重新创建它们,或者进行双重间接寻址:创建从工具的当前位置到新位置的符号链接,以便 /usr/local/bin 中的符号链接继续指向(虽然这次是间接的)到正确的位置。

答案2

如果您使用的文件系统支持重新链接您可以考虑使用参考链接。所以而不是:

ln -s oldloc/foo tools/bar
mv oldloc newloc
# oh dear broken link

使用:

cp --reflink=always oldloc/foo tools/bar
# oldloc/foo and tools/bar point to the same disk extents
mv oldloc newloc
# newloc is just a rename so oldloc/foo and tools/bar still point to the same disk extents

仍有一些警告。如果您安装新版本的“foo”,则工具/栏不会更新。

对于大多数链接使用来说,这是一个主要问题。此外,这种重新链接不适用于目录。

您还可以考虑使用硬链接。硬链接总是指向同一个文件(或者更确切地说是相同的底层磁盘位置)。

相关内容