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 -lsinvece di -execma mostrerà l'inode e altre informazioni del file di destinazione anziché i singoli file.
-Le -samefilefa sì che entrambi siano elencati. Se si omette, i -Lcollegamenti 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.