Collegamento simbolico alla cartella corrente come percorso assoluto senza digitare l'intero percorso


10

I collegamenti simbolici sono collegamenti salvati per percorsi relativi:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Il file ~/bar/fooè un collegamento simbolico alla bardirectory corrente, ovvero a se stesso

Cosa succede se desidero creare un collegamento simbolico in un'altra directory alla directory in cui mi trovo al momento? Così, nell'esempio di cui sopra, sono in ~/fooe voglio creare ~/bar/fooun link simbolico a ~/foo. Naturalmente la mia directory corrente potrebbe essere un po 'più lunga di 5 caratteri e potrebbe non essere così facile da scrivere.

Risposte:


13

Direi tipo

ln -s $PWD ~/bar/

o

ln -s `pwd` ~/bar/

Puoi anche usare

ln -s $PWD ~/bar/

ma credo che tu lo sapessi e non è quello che stai cercando. Quindi, per favore, potresti aggiornare la tua domanda per spiegare qual è il tuo obiettivo?

Se il percorso contiene spazi, sarebbe consigliabile utilizzare:

ln -s "$PWD" ~/bar/

2
Cita due volte le tue $variabili e sostituisci i comandi, altrimenti i nomi dei file con gli spazi si confondono. Inoltre non hai bisogno del finale $(basename $PWD)(e hai dimenticato un $(e un preventivo :-))) poiché comunque è il nome del link predefinito.
Daniel Andersson,

Penso di essere stato stupido. Pensavo di aver provato l' pwdapproccio e qualcosa è andato storto. Mettiamolo giù per un errore ID-ten-T
Gareth,

@DanielAndersson hai ragione che non supporta gli spazi nel percorso. Buon punto. quindi per la cronaca aggiornerò la risposta :)
Huygens,

4

Assolutamente:

ln -s "$(readlink -f .)" ~/bar

(potrebbe essere buono per la generalità negli script) o semplicemente

ln -s ~/foo ~/bar

Relativamente:

ln -s ../foo ~/bar

Il completamento della scheda ti aiuterà a digitare.


Dal commento di grawity e http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Modifiche degne di nota nella versione 8.16 (26-03-2012) [stabile]

...

lnora accetta l' --relativeopzione, per generare un collegamento simbolico relativo a una destinazione, indipendentemente da come viene specificata la destinazione.

Quindi con questa versione:

ln -s --relative . ~/bar

dovrebbe funzionare (con in pratica è identico il tuo primo esempio, con l'aggiunta --relativedell'interruttore).


4
I coreutils più recenti possono creare automaticamente collegamenti simbolici relativi usando ln -s -r foo ~/bar.
user1686

@grawity: interessante. Apparentemente non sul mio sistema (apparentemente Debian Sid).
Daniel Andersson,

Sembra che sia stato aggiunto per la versione 8.16 il 22 marzo, secondo git.
user1686

1
Inoltre, qual è il vantaggio di $(readlink -f .)over $PWD?
user1686

2
@grawity: non molto. Funzionano in modo diverso se la directory di lavoro corrente è stata raggiunta da un collegamento. readlink -fricollegherà quindi il percorso di destinazione assoluto della directory corrente, mentre $PWDsi collegherà alla directory letterale in cui ci si trova attualmente. Ciò che si desidera è probabilmente diverso di volta in volta, e prima di tutto probabilmente non è affatto un problema.
Daniel Andersson,
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.