Come trovare ed elencare tutti i collegamenti simbolici creati per un determinato file?


52

Avevo creato molti collegamenti simbolici su vari percorsi per un determinato file o una directory. Voglio l'intero elenco di percorsi di collegamenti simbolici creati (posizione).

Esempio:

Ho creato collegamenti simbolici per ~/Picturesdirectory su molte directory. Come posso elencare tutti i collegamenti simbolici a quella ~/Picturesdirectory?

È possibile? Se sì, allora come?


È necessario eseguire una ricerca esaustiva, non viene memorizzato alcun conteggio come per i collegamenti reali. Vedi una delle risposte usando find.
ctrl-alt-delor

Risposte:


42

Ecco un esempio:

find -L /dir/to/start -xtype l -samefile ~/Pictures

o forse meglio:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

per eliminare alcuni errori come Permission denied, Too many levels of symbolic linkso File system loop detectedche findli generano quando non hanno le autorizzazioni giuste o altre situazioni.

  • -L - Segui i collegamenti simbolici.

  • -xtype l - Il file è un collegamento simbolico

  • -samefile name- Il file fa riferimento allo stesso inode di name. Quando -Lè attivo, questo può includere collegamenti simbolici.

Appunti:

  • Usa la L minuscola in -xtype l, non la cifra 1.
  • Su macOS / Darwin, -xtypeè -type.

È possibile modificare il comando per trovare un collegamento simbolico che contiene un percorso? ad esempio, i file attraverso il sistema che possono essere collegati a ~ / Pictures / A, ~ / Pictures / A / B / C o qualsiasi file nelle sottodirectory di ~ / Pictures>
snowbound

7

Molto semplice, usa l'opzione -lname:

find / -lname /path/to/original/dir

Da man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Nota : ricorda che i collegamenti simbolici potrebbero trovarsi ovunque, incluso un sistema remoto (se condividi file), quindi potresti non essere in grado di individuarli tutti.


Nota anche che se il collegamento simbolico è un percorso relativo come ../dirallora non troverà l'assoluto /path/to/original/dir, puoi invece usare uno schema ed eliminare falsi positivi-lname \*dir
Jason S

2

Prova questo :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(trova directory con lo stesso numero di inode )

Visualizzerà tutti i suoi percorsi di collegamenti simbolici.


4
Questo troverà collegamenti reali, non collegamenti simbolici. I collegamenti fissi condividono i numeri di inode. i collegamenti simbolici hanno numeri di inode diversi. l'inode di un collegamento simbolico ha un percorso anziché un elenco di blocchi.
Hildred

la domanda non menzionava il collegamento simbolico duro o morbido
nux

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.