Come faccio a creare un collegamento simbolico a una directory con uno spazio al suo interno?


24

Stavo cercando di creare un collegamento simbolico usando il seguente comando:

ln -s "~/Foo Bar/" Foo

... ma non ha funzionato (cioè quando vado in finder e provo a fare doppio clic su di esso, dice che punta a un percorso non valido e mi chiede di eliminare l'alias o risolverlo). Ho dovuto rinominare la cartella FooBare quindi eseguire il comando seguente:

ln -s ~/FooBar/ Foo

Come posso creare il collegamento senza dover rimuovere lo spazio dal nome della cartella?

Sto cercando un modo per farlo in Terminal e non nell'interfaccia utente di Finder.


1
Mentre Gordon Davisson ha ragione, dovresti essere consapevole che alias e collegamenti simbolici (collegamenti simbolici) sono diversi. ln -screa collegamenti simbolici. Il Finder crea alias. Sono quasi identici nell'uso pratico e comune, ma è importante riconoscere che sono diversi . I collegamenti simbolici puntano a un percorso di directory, mentre gli alias puntano a un file. Se si punta entrambi allo stesso file e si sposta il file in una cartella diversa, quindi creare un nuovo file nella vecchia cartella, l'alias punterà all'originale spostato e il collegamento simbolico punterà al nuovo file.
CajunLuke,

1
@Cajun: grazie per il chiarimento. È confuso che finder mostri la proprietà "Kind" di un link simbolico come "Alias".
Senso

4
Anche il completamento della scheda è una cosa meravigliosa, se dovessi farlo: ln -s ~/Foo<tab>(dove <tab> indica il tasto tab (tab) effettivo sulla tastiera), se c'è solo una cartella che inizia con "Foo" in ~allora lo farà automaticamente espandi il percorso a ~/Foo\ Bar/.
Jason Salaz,

Risposte:


41

Le virgolette impediscono ~l'espansione nella cartella principale, quindi è necessario citare solo la parte con lo spazio in essa contenuto:

ln -s ~/"Foo Bar/" Foo

Nota: non importa esattamente quanto viene quotato, purché lo spazio sia nella porzione quotata e ~ / non lo sia. ~/Foo" "Bar/, ~/"Foo Bar"/, ~/Fo"o B"ar/Ecc sono tutte equivalenti. Inoltre, singole e doppie virgolette hanno lo stesso effetto sugli spazi (anche se differiscono su altri personaggi), così ~/'Foo Bar/', ~/Foo' 'Bar/ecc potrebbe anche funzionare.

È inoltre possibile utilizzare una escape per impedire che lo spazio venga trattato come un separatore:

ln -s ~/Foo\ Bar/ Foo

5
Puoi citare seriamente SOLO lo spazio? È fantastico!
Jason Salaz,

Or "$HOME/Foo Bar/".
mercoledì

@wchargin Funzionerà. Nota che ~, a differenza , $HOME dovrebbe essere tra virgolette doppie per evitare confusione se la tua home directory contiene spazi o altri caratteri strani. "$HOME/Foo Bar/"(come lei suggerisce), "$HOME"/Foo" "Bar/, "$HOME"/Foo\ Bar/, ecc funzionerà.
Gordon Davisson,

0

L'ho provato io stesso. Non ho problemi con uno spazio al suo interno:

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

Mostra: $ linkToFoo_Bar -> /Users/joe/test/foo bar/ e funziona senza problemi nel terminale e nel finder.


10
Hai usato un percorso completo, non l' ~aiutante.
Jason Salaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.