如何修复指向错误位置的符号链接?

Hed*_*dge 6 mac symbolic-link macos

我对这里的硬/软链接有点困惑。我在 OSX 上,有一个文件夹“4”和两个指向它的链接:

drwxr-xr-x  4 imm  staff  136 14 Jun 21:24 4
lrwxr-xr-x  1 imm  staff    1 14 Jun 16:56 4.0 -> 4
lrwxr-xr-x  1 507  wheel    1 14 Jun 16:56 Current -> 4
Run Code Online (Sandbox Code Playgroud)

当我在文件夹中跟随“当前”时,它会指向一个完全不同的位置(我从中复制了所有内容的路径)。我希望“当前”指向新位置的文件夹“4”。

我怎样才能做到这一点?

Dar*_*oid 13

您需要删除并重新创建链接。你可以这样做

rm Current
Run Code Online (Sandbox Code Playgroud)

然后重新创建它:

ln -s /path/to/the/new/location Current
Run Code Online (Sandbox Code Playgroud)

您可以使用绝对路径(为简单起见)。

如果您希望在移动链接时移动路径,那么您可以使用相对路径。请记住,它存储相对路径,并且仅在您尝试访问链接时从链接的当前位置解析它。

编辑:既然你提到了硬链接,我会继续在这里介绍它们。

硬链接类似于符号链接,它仍然指向一个文件,但它仅限于当前文件系统,而且速度更快。硬链接指向磁盘上的特定 inode,而不是文件系统中的另一个位置。你不能有相对的硬链接。

您可以将基本文件系统视为指向磁盘上位置的硬链接的集合,每个文件一个。创建额外的硬链接只会创建指向同一文件的额外指针。它们的速度要快得多,因为系统确切地知道它需要的文件在磁盘上的位置(必须解析符号链接,然后必须查找并解析该新文件),但因此它仅限于当前文件系统。

文件系统会自动跟踪指向特定 inode 的硬链接数量,并在该数量达到 0 时简单地删除该 inode。

  • 你可以,虽然它变得有点有趣。相对路径已存储,因此在移动链接(例如,通过移动父文件夹)时必须注意。它将相对于它的新位置指向,并且不会更新以继续指向之前的相同位置。这可能是您想要的,也可能不是,但我知道它起初让我困惑了几次,因为我没有意识到它实际上存储了相对路径,我认为它只是将其解析为绝对路径并存储了它。 (2认同)

小智 7

你可以这样做:

ln -nfs /path/to/the/new/location Current
Run Code Online (Sandbox Code Playgroud)

其中 'Current' 是当前的符号链接。-n 和 -f 选项取消链接并删除原始的“当前”并允许创建新的(-s 表示软链接)。

我意识到这个问题很久以前就已经得到回答并且原来的问题已经解决了,但是重新指向一个符号链接而不通过单独的删除步骤的过程再次困扰着我,谷歌搜索解决方案抛出了这个问答。希望它可以帮助其他人寻找答案!