Jak utworzyć symboliczne łącze do katalogu ze spacją?

24

Próbowałem utworzyć dowiązanie symboliczne za pomocą następującego polecenia:

ln -s "~/Foo Bar/" Foo

... ale to nie zadziałało (tj. kiedy wchodzę do wyszukiwarki i próbuję kliknąć dwukrotnie, oznacza to, że wskazuje nieprawidłową ścieżkę i monituje mnie o usunięcie aliasu lub naprawienie go). Musiałem zmienić nazwę folderu na, FooBara następnie uruchomić następujące polecenie:

ln -s ~/FooBar/ Foo

Jak mogę utworzyć łącze bez konieczności usuwania spacji z nazwy folderu?

Szukam sposobu, aby to zrobić w Terminalu, a nie w interfejsie Findera.

Rozsądny
źródło
1
Chociaż Gordon Davisson ma rację, należy pamiętać, że aliasy i dowiązania symboliczne (dowiązania symboliczne) są różne. ln -stworzy dowiązania symboliczne. Finder tworzy aliasy. Są prawie identyczne w praktycznym, powszechnym użyciu, ale ważne jest, aby rozpoznać, że są różne . Dowiązania symboliczne wskazują ścieżkę do katalogu, a aliasy wskazują plik. Jeśli oba wskazują na ten sam plik i przenosisz plik do innego folderu, a następnie utwórz nowy plik w starym folderze, alias będzie wskazywał na przeniesiony oryginał, a łącze symboliczne wskaże nowy plik.
CajunLuke
1
@Cajun: dzięki za wyjaśnienie. To mylące, że Finder pokazuje właściwość „Rodzaj” linku symbolicznego jako „Alias”.
Rozsądny
4
Uzupełnianie tabulatorów jest również cudowną rzeczą, jeśli zrobiłbyś to: ln -s ~/Foo<tab>(gdzie <tab> oznacza rzeczywisty klawisz ⇥ (tab) na klawiaturze), jeśli jest tylko jeden folder, który zaczyna się od „Foo”, ~to automatycznie rozwiń ścieżkę do ~/Foo\ Bar/.
Jason Salaz

Odpowiedzi:

41

Znaki cudzysłowu nie mogą ~zostać rozszerzone do twojego folderu domowego, więc musisz albo zacytować tylko część z miejscem w nim:

ln -s ~/"Foo Bar/" Foo

Uwaga: dokładnie to, ile cytatu jest cytowane, nie ma znaczenia, dopóki miejsce jest w cytowanej części, a ~ / nie. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/Etc są równoważne. Ponadto, jedno- i dwu-cytaty mają taki sam wpływ na przestrzeni (choć różnią się one od innych znaków), tak ~/'Foo Bar/', ~/Foo' 'Bar/etc również pracy.

Możesz także użyć klawisza Escape, aby zapobiec traktowaniu przestrzeni jako separatora:

ln -s ~/Foo\ Bar/ Foo
Gordon Davisson
źródło
5
Możesz poważnie zacytować tylko przestrzeń? To cudownie!
Jason Salaz
Lub "$HOME/Foo Bar/".
wchargin
@wchargin To zadziała. Zauważ, że w przeciwieństwie do ~, $HOME powinien być w cudzysłowie, aby zapobiec pomyłkom, jeśli twój katalog domowy zawiera spacje lub inne dziwne znaki. "$HOME/Foo Bar/"(jak sugerujesz) "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/itp zadziała.
Gordon Davisson
0

Sam to przetestowałem. Nie mam problemu ze spacją:

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

ls shows: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ i działa bez problemu w terminalu i wyszukiwarce.


źródło
10
Użyłeś pełnej ścieżki, a nie ~pomocnika.
Jason Salaz