Andare in una directory collegata da un collegamento


12

Quando ho cdun collegamento, il mio percorso corrente è preceduto dal percorso del collegamento, piuttosto che dal percorso della directory a cui si collega il collegamento. Per esempio

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Vorrei che il mio percorso corrente fosse cambiato nel percorso della directory collegata, in modo da poter lavorare anche con le directory principali della directory collegata. Oltre lsal link per scoprire la directory collegata, e poi cdin essa, quali sono alcuni modi più semplici per farlo? Ad esempio, dopo cdun collegamento, come si modifica il percorso corrente nel percorso della directory collegata?

Risposte:


22

Con la shell POSIX, puoi usare l' -Popzione di cd builtin:

cd -P <link>

Con bash, da man bash:

L'opzione -P dice di usare la struttura di directory fisica invece di seguire i collegamenti simbolici (vedi anche l'opzione -P al comando incorporato set)


7
Puoi farlo cd -P .dopo l'originale cd.
ctrl-alt-delor,

5

Puoi usare readlinkper determinare dove punta il tuo link e fornire questo output come target del tuo cd.

cd "$(readlink <link>)"

Nel caso di collegamenti simbolici aggiuntivi che puntano a collegamenti simbolici, readlinkfornirà semplicemente la destinazione, a meno che non specifichi una delle sue opzioni per seguire i collegamenti simbolici a una destinazione di file canonica, ad esempio readlink -f <link>.

readlink - stampa il valore di un collegamento simbolico o del nome file canonico

-f, --canonicalizzare
canonicalizzare seguendo ricorsivamente ogni collegamento simbolico in ogni componente del nome dato; tutti tranne l'ultimo componente devono esistere

-e, --canonicalizzare-
canonicalizzare -esistente seguendo ricorsivamente ogni collegamento simbolico in ogni componente del nome dato, tutti i componenti devono esistere

-m, --canonicalizza la mancanza
canonicalizza seguendo ricorsivamente ogni collegamento simbolico in ogni componente del nome dato, senza requisiti sull'esistenza di componenti


5

Le shell simili a Korn tengono traccia dei collegamenti simbolici nel percorso della directory corrente (questo è noto come monitoraggio logico della directory corrente). Se si desidera espandere tutti i collegamenti simbolici, passare l'opzione -Pal cdbuilt-in (per il tracciamento della directory corrente fisica):

cd -P logic

Se ti trovi in ​​una directory a cui hai effettuato l'accesso tramite un collegamento simbolico e desideri spostare la directory corrente tracciata sul percorso con i collegamenti simbolici espansi, esegui

cd -P .

Se si desidera stampare il percorso della directory corrente con i collegamenti simbolici espansi, eseguire pwd -P. In bash, se si desidera disattivare il tracciamento logico, eseguire set -P; in zsh, esegui set -wo setopt chase_links.

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.