Como crio um link simbólico para um diretório com um espaço nele?

24

Eu estava tentando criar um link simbólico usando o seguinte comando:

ln -s "~/Foo Bar/" Foo

... mas não funcionou (ou seja, quando vou ao localizador e tento clicar duas vezes nele, ele indica que está apontando para um caminho inválido e solicita que eu exclua o alias ou corrija-o). Eu tive que renomear a pasta FooBare, em seguida, execute o seguinte comando:

ln -s ~/FooBar/ Foo

Como posso criar o link sem precisar remover o espaço do nome da pasta?

Estou procurando uma maneira de fazer isso no Terminal e não na interface do usuário do Finder.

Sensível
fonte
1
Enquanto Gordon Davisson estiver certo, você deve estar ciente de que aliases e links simbólicos (links simbólicos) são diferentes. ln -sfaz links simbólicos. O Finder cria aliases. Eles são quase idênticos em uso prático e comum, mas é importante reconhecer que são diferentes . Os links simbólicos apontam para um caminho de diretório, enquanto os aliases apontam para um arquivo. Se você apontar para o mesmo arquivo e mover o arquivo para uma pasta diferente, crie um novo arquivo na pasta antiga, o alias apontará para o original movido e o link simbólico apontará para o novo arquivo.
CajunLuke 17/02
1
@ Cajun: obrigado pelo esclarecimento. É confuso que o localizador mostre a propriedade "Kind" de um link simbólico como "Alias".
Sensável
4
A conclusão da guia também é uma coisa maravilhosa, se você fizer isso: ln -s ~/Foo<tab>(em que <tab> indica a tecla ⇥ (guia) real do teclado), se houver apenas uma pasta que comece com "Foo" ~, ela será automaticamente ativada. expanda o caminho para ~/Foo\ Bar/.
Jason Salaz

Respostas:

41

As aspas estão impedindo ~de serem expandidas para sua pasta pessoal, portanto, você precisa citar apenas a parte com o espaço nela:

ln -s ~/"Foo Bar/" Foo

Nota: exatamente quanto é citado não importa, desde que o espaço esteja na parte citada e o / não esteja. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/Etc, são todos equivalentes. Além disso, aspas simples e duplas têm o mesmo efeito nos espaços (embora sejam diferentes em outros caracteres), portanto ~/'Foo Bar/', ~/Foo' 'Bar/etc também funcionariam.

Você também pode usar uma fuga para impedir que o espaço seja tratado como um separador:

ln -s ~/Foo\ Bar/ Foo
Gordon Davisson
fonte
5
Você pode citar seriamente apenas o espaço? Fantástico!
Jason Salaz
Or "$HOME/Foo Bar/".
Whargin
@wchargin Isso vai funcionar. Observe que ~, ao contrário , $HOME deve estar entre aspas duplas para evitar confusão se o diretório inicial contiver espaços ou outros caracteres estranhos. "$HOME/Foo Bar/"(como você sugere), "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/, etc vai funcionar.
Gordon Davisson
0

Eu mesmo testei. Não tenho nenhum problema com um espaço:

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

sl mostra: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ e funciona no terminal e localizador sem problemas.


fonte
10
Você usou um caminho completo, não o ~ajudante.
Jason Salaz