如何创建指向目录的符号链接?


24

我试图使用以下命令创建符号链接:

ln -s "~/Foo Bar/" Foo

...但是它没有用(即当我进入finder并尝试双击它时,它说它指向无效的路径,并提示我删除别名或修复它)。我必须将文件夹重命名为FooBar,然后运行以下命令:

ln -s ~/FooBar/ Foo

如何创建链接而不必从文件夹名称中删除空格?

我正在寻找一种在终端中而不是在Finder的UI中执行此操作的方法。


1
虽然戈登·戴维森(Gordon Davisson)是正确的,但您应该知道别名和符号链接(符号链接)是不同的。ln -s建立符号链接。Finder创建别名。它们在实际的通用用法上几乎是相同的,但是重要的是要认识到它们是不同的。符号链接指向目录路径,而别名指向文件。如果您都指向同一文件,并且将文件移动到另一个文件夹,然后在旧文件夹中创建一个新文件,则别名将指向已移动的原始文件,符号链接将指向新文件。
CajunLuke

1
@Cajun:感谢您的澄清。finder将符号链接的“ Kind”属性显示为“ Alias”令人困惑。
有意义的2011年

4
制表符补全也是一件奇妙的事情,如果要执行以下操作:(ln -s ~/Foo<tab>其中<tab>表示键盘上的实际⇥(制表键)),如果只有一个以“ Foo”开头的文件夹,~它将自动扩大通往的道路~/Foo\ Bar/
詹森·萨拉兹

Answers:


41

用引号引起的~扩展名不会扩展到您的主文件夹,因此您只需要引用其中带有空格的部分即可:

ln -s ~/"Foo Bar/" Foo

注意:只要空格在加引号的部分中,而〜/不是,加引号的大小无关紧要。~/Foo" "Bar/~/"Foo Bar"/~/Fo"o B"ar/等都是等价的。此外,单精度和双引号对空间的效果相同(虽然他们在其他字符不同),这样~/'Foo Bar/'~/Foo' 'Bar/等会还的工作。

您还可以使用转义符来防止将空格视为分隔符:

ln -s ~/Foo\ Bar/ Foo

5
您可以认真引用一下空格吗?棒极了!
詹森·萨拉兹

或者"$HOME/Foo Bar/"
wchargin

@wchargin可以的。请注意,如果主目录中包含空格或其他奇怪的字符~$HOME 则应在双引号中使用,以防止混淆。"$HOME/Foo Bar/"(你的建议), ,"$HOME"/Foo" "Bar/"$HOME"/Foo\ Bar/等会工作。
戈登·戴维森

0

我自己测试过。我的空间没有问题:

    $ ln -s "/Users/joe/test/foo bar"/ linkToFoo_Bar

ls显示: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ 它可以在终端和取景器中正常工作。


10
您使用的是完整路径,而不是~帮助程序。
詹森·萨拉兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.