Se ho un file specifico in un filesystem UNIX, c'è un modo per usare bash per trovare tutti i collegamenti a quel file, sia simbolici che hard? Se ho bisogno di comandi diversi per ognuno, quali sono?
Se ho un file specifico in un filesystem UNIX, c'è un modo per usare bash per trovare tutti i collegamenti a quel file, sia simbolici che hard? Se ho bisogno di comandi diversi per ognuno, quali sono?
Risposte:
Prova questo con GNU find
:
find /start/dir -L -samefile /file/to/check -exec ls -li {} \;
Esempio di output:
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1
È possibile utilizzare -ls
invece di -exec
ma mostrerà l'inode e altre informazioni del file di destinazione anziché i singoli file.
-L
e -samefile
fa sì che entrambi siano elencati. Se si omette, i -L
collegamenti simbolici non vengono seguiti (vedere man find
).
Se non hai GNU Find puoi farlo:
find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"
Ma non funzionerà per i collegamenti simbolici.