Wenn ich eine bestimmte Datei in einem UNIX-Dateisystem habe, gibt es eine Möglichkeit, mit bash alle symbolischen und harten Links zu dieser Datei zu finden? Wenn ich für jeden unterschiedliche Befehle benötige, welche sind das?
Wenn ich eine bestimmte Datei in einem UNIX-Dateisystem habe, gibt es eine Möglichkeit, mit bash alle symbolischen und harten Links zu dieser Datei zu finden? Wenn ich für jeden unterschiedliche Befehle benötige, welche sind das?
Antworten:
Versuchen Sie dies mit GNU find
:
find /start/dir -L -samefile /file/to/check -exec ls -li {} \;
Beispielausgabe:
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
Sie können -ls
anstelle von verwenden, -exec
aber es zeigt den Inode und andere Informationen der Zieldatei anstelle der einzelnen Dateien.
-L
und -samefile
bewirkt, dass beide aufgelistet werden. Wenn Sie weglassen, werden -L
symbolische Links nicht befolgt (siehe man find
).
Wenn Sie GNU Find nicht haben, können Sie dies tun:
find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"
Bei symbolischen Links funktioniert dies jedoch nicht.