collegamento simbolico: trova tutti i file che si collegano a questo file


Risposte:


132

Dipende, se stai cercando di trovare collegamenti a un file specifico che viene chiamato, foo.txt,questo è l'unico buon modo:

find -L / -samefile path/to/foo.txt

D'altra parte, se stai solo cercando di trovare collegamenti a qualsiasi file che abbia un nome foo.txt, allora qualcosa di simile

find / -lname foo.txt

o

find . -lname \*foo.txt # ignore leading pathname components

problema risolto magnificamente. Grazie a tutte le persone che hanno risposto.
lukmac

8
Poiché ho commentato una risposta eliminata, puoi utilizzare -xtype lper trovare solo i
collegamenti

potresti voler ricorrere, poiché qualsiasi file che punta a foo.txt potrebbe essere a sua volta puntato da altri link ... es: A-> B-> foo.txt, / tmp / C-> B-> foo.txt, ecc.
Olivier Dulac

questo può funzionare anche se il componente del nome è una directory principale denominata nel collegamento, cercando find . -lname '*foo.dir*'(corrisponde ad esempio file.txt -> ../foo.dir/file.txt)
Yonatan

22

Trova il numero di inode del file e quindi cerca tutti i file con lo stesso numero di inode:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

In alternativa, prova l' lnameopzione di find, ma non funzionerà se hai collegamenti simbolici relativi, ad esa -> ../foo.txt

$ find . -lname /path/to/foo.txt

3
Se usi una versione recente di GNU find, puoi anche usare l' -samefileopzione con -Lper lo stesso effetto, senza dover cercare tu stesso l'inode
Hasturkun

5
Ma questo troverà anche file su altri file system che hanno lo stesso numero di inode.
DigitalRoss

Se fooè una directory, usa ln -di, in una riga:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77

1
Questa risposta è sbagliata. Un collegamento simbolico non ha lo stesso inode del suo obiettivo. Funzionerà solo per un file all'interno di una cartella con collegamento simbolico. Ma questo non è ciò che è stato chiesto.
Jules Lamur

4

Preferisco usare l' symlinksutilità, che è utile anche quando si cercano collegamenti simbolici interrotti. Installa da:

sudo apt install symlinks

Mostra tutti i collegamenti simbolici nella cartella e nelle sottocartelle correnti:

symlinks -rv .
  • -r: ricorsivo
  • -v: verbose (mostra tutti i link simbolici, non solo quelli non funzionanti)

Per trovare un collegamento simbolico specifico, basta grep:

symlinks -rv . | grep foo.txt
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.