Comment créer un lien symbolique vers un répertoire contenant un espace?

24

J'essayais de créer un lien symbolique à l'aide de la commande suivante:

ln -s "~/Foo Bar/" Foo

... mais cela n'a pas fonctionné (c'est-à-dire lorsque je vais dans le Finder et que j'essaie de double-cliquer dessus, il indique qu'il pointe vers un chemin non valide et m'invite à supprimer l'alias ou à le corriger). J'ai dû renommer le dossier FooBar, puis exécuter la commande suivante:

ln -s ~/FooBar/ Foo

Comment puis-je créer le lien sans avoir à supprimer l'espace du nom du dossier?

Je cherche un moyen de le faire dans Terminal et non dans l'interface utilisateur du Finder.

Sensé
la source
1
Bien que Gordon Davisson ait raison, vous devez savoir que les alias et les liens symboliques (liens symboliques) sont différents. ln -scrée des liens symboliques. Le Finder crée des alias. Ils sont presque identiques dans leur utilisation pratique et courante, mais il est important de reconnaître qu'ils sont différents . Les liens symboliques pointent vers un chemin de répertoire, tandis que les alias pointent vers un fichier. Si vous avez tous deux pointé vers le même fichier et que vous déplacez le fichier vers un dossier différent, puis créez un nouveau fichier dans l'ancien dossier, l'alias pointera vers l'original déplacé et le lien symbolique pointera vers le nouveau fichier.
CajunLuke
1
@Cajun: merci pour la clarification. Il est déroutant que le Finder montre la propriété "Kind" d'un lien symbolique comme "Alias".
Senseful
4
L'achèvement des tabulations est également une chose merveilleuse, si vous deviez faire ceci: ln -s ~/Foo<tab>(où <tab> désigne la touche tab (tab) réelle de votre clavier), s'il n'y a qu'un seul dossier qui commence par "Foo", ~alors il sera automatiquement élargir le chemin vers ~/Foo\ Bar/.
Jason Salaz

Réponses:

41

Les guillemets empêchent ~d'être étendus dans votre dossier de base, vous devez donc soit citer uniquement la partie avec l'espace qu'il contient:

ln -s ~/"Foo Bar/" Foo

Remarque: exactement combien est cité n'a pas d'importance, tant que l'espace est dans la partie citée et que le ~ / ne l'est pas. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/Etc sont tous équivalents. De plus, les guillemets simples et doubles ont le même effet sur les espaces (bien qu'ils diffèrent sur les autres caractères), donc ~/'Foo Bar/', ~/Foo' 'Bar/etc. fonctionnerait également.

Vous pouvez également utiliser un échappement pour empêcher que l'espace ne soit traité comme un séparateur:

ln -s ~/Foo\ Bar/ Foo
Gordon Davisson
la source
5
Vous pouvez sérieusement citer juste l'espace? C'est génial!
Jason Salaz
Ou "$HOME/Foo Bar/".
wchargin
@wchargin Ça va marcher. Notez que contrairement à ~, $HOME devrait être entre guillemets pour éviter toute confusion si votre répertoire personnel contient des espaces ou d'autres caractères étranges. "$HOME/Foo Bar/"(comme vous le suggérez), "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/, etc fonctionnera.
Gordon Davisson
0

Je l'ai testé moi-même. Je n'ai pas de problème avec un espace dedans:

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

ls montre: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ et cela fonctionne dans le terminal et le finder sans aucun problème.


la source
10
Vous avez utilisé un chemin complet, pas l' ~aide.
Jason Salaz