Wie erstelle ich einen symbolischen Link zu einem Verzeichnis mit einem Leerzeichen?

24

Ich habe versucht, eine symbolische Verknüpfung mit dem folgenden Befehl zu erstellen:

ln -s "~/Foo Bar/" Foo

... aber es hat nicht funktioniert (dh wenn ich in den Finder gehe und versuche, darauf zu doppelklicken, wird angezeigt, dass es auf einen ungültigen Pfad verweist, und ich werde aufgefordert, den Alias ​​zu löschen oder ihn zu reparieren). Ich musste den Ordner in umbenennen FooBarund dann den folgenden Befehl ausführen:

ln -s ~/FooBar/ Foo

Wie kann ich den Link erstellen, ohne das Leerzeichen aus dem Ordnernamen entfernen zu müssen?

Ich suche nach einer Möglichkeit, dies im Terminal und nicht in der Benutzeroberfläche des Finders zu tun.

Sinnvoll
quelle
1
Während Gordon Davisson Recht hat, sollten Sie sich bewusst sein, dass Aliase und symbolische Links (Symlinks) unterschiedlich sind. ln -smacht symlinks. Der Finder macht Aliase. Sie sind im praktischen und allgemeinen Gebrauch fast identisch, aber es ist wichtig zu erkennen, dass sie unterschiedlich sind . Symlinks verweisen auf einen Verzeichnispfad, Aliase auf eine Datei. Wenn Sie beide auf dieselbe Datei zeigen und die Datei in einen anderen Ordner verschieben, dann erstellen Sie eine neue Datei im alten Ordner, der Alias ​​zeigt auf das verschobene Original und der Symlink zeigt auf die neue Datei.
CajunLuke
1
@Cajun: danke für die aufklärung. Es ist verwirrend, dass der Finder die Eigenschaft "Kind" eines symbolischen Links als "Alias" anzeigt.
Sinnvolle
4
Die Tab-Vervollständigung ist auch eine wunderbare Sache, wenn Sie dies tun: ln -s ~/Foo<tab>(wobei <tab> die tatsächliche ⇥ (tab) -Taste auf Ihrer Tastatur bezeichnet), wenn es nur einen Ordner gibt, der mit "Foo" beginnt ~, wird dies automatisch der Fall sein Erweitern Sie den Pfad zu ~/Foo\ Bar/.
Jason Salaz

Antworten:

41

Die Anführungszeichen verhindern, ~dass sie in Ihren Basisordner erweitert werden. Daher müssen Sie entweder nur den Teil mit dem Leerzeichen in Anführungszeichen setzen:

ln -s ~/"Foo Bar/" Foo

Hinweis: Es spielt keine Rolle, wie viel genau in Anführungszeichen steht, solange sich das Leerzeichen im angegebenen Teil befindet und das ~ / nicht. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/Usw. sind alle äquivalent. Auch Ein- und doppelte Anführungszeichen haben die gleiche Wirkung auf den Feldern (auch wenn sie auf anderen Zeichen unterscheiden), so ~/'Foo Bar/', ~/Foo' 'Bar/etc würde auch funktionieren.

Sie können auch ein Escape verwenden, um zu verhindern, dass das Leerzeichen als Trennzeichen behandelt wird:

ln -s ~/Foo\ Bar/ Foo
Gordon Davisson
quelle
5
Sie können nur den Raum ernsthaft zitieren? Das ist großartig!
Jason Salaz
Oder "$HOME/Foo Bar/".
Wchargin
@ Wchargin Das wird funktionieren. Beachten Sie, dass im Gegensatz zu ~, $HOME sollte in doppelten Anführungszeichen seine Verwirrung zu vermeiden , wenn Ihr Home - Verzeichnis enthält Leerzeichen oder andere seltsame Zeichen. "$HOME/Foo Bar/"(wie Sie vorschlagen) "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/wird usw. arbeiten.
Gordon Davisson
0

Ich habe es selbst getestet. Ich habe kein Problem mit einem Leerzeichen:

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

ls zeigt: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ und es funktioniert problemlos in Terminal und Finder.


quelle
10
Sie haben einen vollständigen Pfad verwendet, nicht den ~Helfer.
Jason Salaz