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

当我这样指定它时,它可以正常工作:

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设置为显示彩色输出时,我家中的数据符号链接也被涂成红色。 br />
为什么会这样?如何以这种方式创建链接? (我想在我的工作目录中的另一个目录中创建指向目录的符号链接。)



编辑:根据此StackOverflow答案,如果第二个参数(在我的(如果是〜/ Data)已经存在并且是一个目录,则ln将在该目录内创建指向目标的符号链接。

但是,我在遇到以下问题:

ln -s Data/ ~/


评论

只是一个随机提示:cd〜通常与cd相同。

ls -l〜/ Data可以帮助您查看“红色”链接出了什么问题。

嗯,不知道我能做到,谢谢。我记得曾经尝试过照顾它,但我忘记了结果如何...(我当时不在他们家。)

旁注,假设您只想创建特定文件夹内所有文件dir和subdir的符号链接,例如/ run / media / name / exhdd / Data /内的所有项到Data,然后使用以下ln -s / run / media / name / exhdd / Data / *数据

#1 楼

这是正在发生的事情。如果使用相对路径创建符号链接,则该符号链接将是相对的。符号链接仅存储您提供的路径。他们从不解析完整路径。运行

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


,相对于符号链接所在的目录(ls2),在/usr/binls(即/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 楼

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

ln -sT 


-T可以解决问题

man ln:

-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 / targatedfolder / var / www / html / link_name