¿Cómo creo un enlace simbólico a un directorio con un espacio en él?

24

Intenté crear un enlace simbólico con el siguiente comando:

ln -s "~/Foo Bar/" Foo

... pero no funcionó (es decir, cuando entro en el buscador e intento hacer doble clic en él, dice que apunta a una ruta no válida y me pide que elimine el alias o lo corrija). Tuve que cambiar el nombre de la carpeta FooBary luego ejecutar el siguiente comando:

ln -s ~/FooBar/ Foo

¿Cómo puedo crear el enlace sin tener que eliminar el espacio del nombre de la carpeta?

Estoy buscando una manera de hacer esto en Terminal y no en la interfaz de usuario de Finder.

Sensato
fuente
1
Si bien Gordon Davisson tiene razón, debe tener en cuenta que los alias y los enlaces simbólicos (enlaces simbólicos) son diferentes. ln -shace enlaces simbólicos. El buscador hace alias. Son casi idénticos en el uso práctico y común, pero es importante reconocer que son diferentes . Los enlaces simbólicos apuntan a una ruta de directorio, mientras que los alias apuntan a un archivo. Si tiene ambos apuntando al mismo archivo y mueve el archivo a una carpeta diferente, luego crea un nuevo archivo en la carpeta anterior, el alias apuntará al original movido y el enlace simbólico apuntará al nuevo archivo.
CajunLuke
1
@Cajun: gracias por la aclaración. Es confuso que el buscador muestre la propiedad "Tipo" de un enlace simbólico como "Alias".
Senseful
44
La finalización de tabulación también es algo maravilloso, si hiciera esto: ln -s ~/Foo<tab>(donde <tab> denota la tecla ⇥ (tabulación) real en su teclado), si solo hay una carpeta que comienza con "Foo", ~entonces automáticamente ampliar el camino hacia ~/Foo\ Bar/.
Jason Salaz

Respuestas:

41

Las comillas evitan que ~se expandan a su carpeta de inicio, por lo que debe citar solo la parte con el espacio en ella:

ln -s ~/"Foo Bar/" Foo

Nota: no importa exactamente cuánto se cita, siempre que el espacio esté en la porción citada y el ~ / no lo sea. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/Etc, son todos equivalentes. Además, las comillas simples y dobles tienen el mismo efecto en los espacios (aunque difieren en otros caracteres), por lo que ~/'Foo Bar/', ~/Foo' 'Bar/etc., también funcionarían.

También podría usar un escape para evitar que el espacio sea tratado como un separador:

ln -s ~/Foo\ Bar/ Foo
Gordon Davisson
fuente
55
¿Puedes citar seriamente SOLO el espacio? ¡Eso es genial!
Jason Salaz
O "$HOME/Foo Bar/".
wchargin
@wchargin Eso funcionará. Tenga en cuenta que ~, a diferencia , $HOME debe estar entre comillas dobles para evitar confusiones si su directorio principal contiene espacios u otros caracteres extraños. "$HOME/Foo Bar/"(como usted sugiere), "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/, etc va a funcionar.
Gordon Davisson
0

Lo probé yo mismo. No tengo ningún problema con un espacio en él:

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

ls shows: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ y funciona en terminal y buscador sin ningún problema.


fuente
10
Usaste un camino completo, no el ~ayudante.
Jason Salaz