Utilizzo di GNU find
, questo troverà i file che sono hard link o collegamenti simbolici a un file:
find -L /dir/to/start -samefile /tmp/orig.file
Non ho visto un comando per questo e non è un compito facile, dal momento che il file di destinazione non contiene informazioni su quali file di origine puntano ad esso.
Questo è simile ai collegamenti "hard" ma almeno quelli sono sempre sullo stesso file system, quindi puoi fare un find -inode
per elencarli. I soft link sono più problematici poiché possono attraversare i file system.
Penso che quello che dovrai fare sia fondamentalmente eseguire un ls -al
su ogni file nell'intera gerarchia e usa grep
per cercare -> /path/to/target/file
.
Ad esempio, eccone uno che ho eseguito sul mio sistema (formattato per la leggibilità - quelle ultime due righe sono in realtà su una riga nell'output reale):
pax$ find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /usr/share/applications'
lrwxrwxrwx 1 pax pax 23 2010-06-12 14:56 /home/pax/applications_usr_share
-> /usr/share/applications
Ispirato dal commento di Gordon Davisson. Questo è simile a un'altra risposta, ma ho ottenuto i risultati desiderati utilizzando exec. Avevo bisogno di qualcosa che potesse trovare collegamenti simbolici senza sapere dove si trovava il file originale.
find / -type l -exec ls -al {} \; | grep -i "all_or_part_of_original_name"