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

Ich habe versucht, einen symbolischen Link 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, sagt es, dass es auf einen ungültigen Pfad zeigt und fordert mich auf, den Alias ​​zu löschen oder zu reparieren). Ich musste den Ordner 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 von Finder zu tun.

Während Gordon Davisson Recht hat, sollten Sie sich bewusst sein, dass Aliase und symbolische Links (Symlinks) unterschiedlich sind. ln -smacht Symlinks. Der Finder erstellt Aliase. Sie sind in der praktischen, allgemeinen Verwendung fast identisch, aber es ist wichtig zu erkennen, dass sie unterschiedlich sind . Symlinks verweisen auf einen Verzeichnispfad, während Aliase auf eine Datei verweisen. Wenn beide auf dieselbe Datei verweisen und Sie 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 auf die neue Datei.
@Cajun: Danke für die Klarstellung. Es ist verwirrend, dass der Finder die Eigenschaft „Kind“ eines symbolischen Links als „Alias“ anzeigt.
Die Tab-Vervollständigung ist auch eine wunderbare Sache, wenn Sie dies tun würden: ln -s ~/Foo<tab>(wobei <tab> die tatsächliche Taste ⇥ (Tabulator) auf Ihrer Tastatur bezeichnet), wenn es nur einen Ordner gibt, der mit "Foo" beginnt, ~dann wird es automatisch Erweitern Sie den Pfad auf ~/Foo\ Bar/.

Antworten (2)

Die Anführungszeichen verhindern ~, dass sie in Ihren Home-Ordner erweitert werden, also müssen Sie entweder nur den Teil mit dem Leerzeichen zitieren:

ln -s ~/"Foo Bar/" Foo

Hinweis: Wie viel genau zitiert wird, spielt keine Rolle, solange das Leerzeichen im zitierten Teil steht und ~/ nicht. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/usw. sind alle gleichwertig. Außerdem haben einfache und doppelte Anführungszeichen die gleiche Wirkung auf Leerzeichen (obwohl sie sich bei anderen Zeichen unterscheiden), also würden ~/'Foo Bar/', ~/Foo' 'Bar/usw. auch funktionieren.

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

ln -s ~/Foo\ Bar/ Foo
Sie können NUR den Raum ernsthaft zitieren? Das ist großartig!
Oder "$HOME/Foo Bar/".
@wchargin Das wird funktionieren. Beachten Sie, dass im Gegensatz zu ~, in doppelte Anführungszeichen gesetzt werden $HOME sollte , um Verwirrung zu vermeiden, wenn Ihr Home-Verzeichnis Leerzeichen oder andere seltsame Zeichen enthält. "$HOME/Foo Bar/"(wie Sie vorschlagen), "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/, usw. funktionieren.

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

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

ls zeigt: $ linkToFoo_Bar -> /Users/joe/test/foo bar/und es funktioniert im Terminal und im Finder ohne Probleme.

Sie haben einen vollständigen Pfad verwendet, nicht den ~Helfer.