创建相对于当前目录的符号链接

创建相对于当前目录的符号链接

我正在尝试在我的主目录中创建一个符号链接,该链接指向我的外部硬盘上的目录。

当我像这样指定它时它工作得很好:

cd ~
ln -s /run/media/name/exhdd/Data/ Data

然而,当我尝试这样做时,它会创建一个错误的链接:

cd /run/media/name/exhdd
ln -s Data/ ~/Data

这会创建一个我无法cd进入的链接。

当我尝试时,bash 抱怨:

bash: cd: Data: Too many levels of symbolic links

ls当设置为显示彩色输出时,我家中的数据符号链接也显示为红色。

为什么会发生这种情况?我怎样才能以这种方式创建链接? (我想在另一个目录中创建一个指向我的工作目录中的目录的符号链接。)


编辑:根据StackOverflow 答案,如果第二个参数(在我的例子中是 ~/Data)已经存在并且是一个目录,ln将创建一个到目标的符号链接里面那个目录。

但是,我遇到了同样的问题:

ln -s Data/ ~/

答案1

这就是发生的事情。如果使用相对路径创建符号链接,则该符号链接将是相对的。符号链接仅存储您提供的路径。他们永远不会将路径解析为完整路径。跑步

$ pwd
/usr/bin
$ ln -s ls /usr/bin/ls2

创建一个名为ls2in /usr/binto ls(即/usr/bin/ls)的符号链接,相对于该符号链接所在的目录 ( /usr/bin)。上面的命令将从任何目录创建一个功能符号链接。

$ pwd
/home/me
$ ln -s ls /usr/bin/ls2

如果您将符号链接移动到其他目录,它将不再指向/usr/bin/ls.

您正在创建一个指向 的符号链接Data并命名它Data。它指向它自己。您必须使用目录的绝对路径创建符号链接。

ln -s "$(realpath Data)" ~/Data

答案2

我也遇到了同样的问题。谷歌得出了这个答案,但这里没有记录最简单的解决方案:

ln -sT 

-T 就可以了

男人在:

-T, --no-target-directory
    treat LINK_NAME as a normal file always

只需在此处添加它,以便任何有同样问题的人都可以找到它:)

答案3

ln相对路径的行为是不直观的。要恢复理智,请使用-r旗帜。

cd /run/media/name/exhdd
ln -sr Data/ ~/Data

解释:

   -r, --relative
          create symbolic links relative to link location

这意味着它将按照ln您的预期进行操作。它将考虑您所在的目录、目标所在的目录,并构造一个相对于链接所在目录的路径。默认行为(不带-r)是解释第一个参数(目标)字面上地,在这种情况下,您必须自己构建路径,以便它在链接的目录中有效。

或者,使用绝对路径,如@SmithJohn所述

ln -s "$(realpath Data)" ~/Data #bash shell

或者

ln -s "(realpath Data)" ~/Data #fish shell

答案4

非常简单,您可以为文件夹创建链接。看我的命令

ln -s /home/targedfolder /var/www/html/link_name

相关内容