Come trovare tutti i collegamenti simbolici che puntano a qualsiasi file / directory all'interno di una determinata directory


15

Su questa domanda o su questa (ad esempio) otterrai soluzioni su come cercare /dir1collegamenti simbolici che puntano a una determinata directory (chiamiamola ), mentre sono interessato a collegamenti simbolici che probabilmente puntano a qualsiasi file / cartella all'interno /dir1.

Voglio eliminare tale directory ma non sono sicuro di poterlo fare in modo sicuro, come in un'altra directory (chiamiamolo /dir2), potrei avere collegamenti simbolici che puntano a parti interne di /dir1.

Inoltre, potrei aver creato questi symlink usando percorsi assoluti o relativi. Il mio unico aiuto è che so che i link simbolici che voglio controllare sono su un filesystem montato, su /dir2.

Risposte:


15

Puoi trovare tutti i link simbolici usando:

find / -type l 

potresti voler eseguire questo come root per raggiungere ogni posizione sul disco.

Puoi espanderli usando readlink -fper ottenere il percorso completo del collegamento e dovresti essere in grado di grepprodurre l'output sulla directory di destinazione che stai considerando per l'eliminazione:

find / -type l -exec readlink -f {} + | grep -F /dir2

L'utilizzo find / -type l -printf '%l\n'non funziona quando si ottengono collegamenti relativi come quelli ../tmp/xyzche potrebbero puntare alla directory di destinazione, ma non vengono abbinati perché non sono completamente espansi.


1
In caso di sottostruttura può essere utile seguire i symlink:find -L /subtree -xtype l -exec readlink -f {} +
ruvim

3

Nel mio caso, la risposta accettata non è stata utile (perché non ha generato l'origine del collegamento). Ecco cosa ha funzionato per me.

Ci ho provato usando due -execclausole:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"

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.