Alle symbolischen und festen Links zu einer Datei unter UNIX finden

9170
colin.t.welch

Wenn ich eine bestimmte Datei in einem UNIX-Dateisystem habe, gibt es eine Möglichkeit, bash zu verwenden, um alle Links zu dieser Datei zu finden, sowohl symbolisch als auch hart. Wenn ich für jeden unterschiedliche Befehle benötige, was sind sie?

9

2 Antworten auf die Frage

8
Dennis Williamson

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 -lsanstelle von verwenden, -execaber es werden der Inode und andere Informationen der Zieldatei anstelle der einzelnen Dateien angezeigt.

Diese Ausgabe zeigt harte und sym-Links. Sym-Links sind mit -> Pfeil gekennzeichnet. aaaidan vor 14 Jahren 0
@aaaidan: Ja, das stimmt. Die Inode-Nummer von x1 und x2 ist gleich und zeigt an, dass es sich um feste Links handelt. Der Pfeil zeigt einen Symlink an. Die Verwendung von "-L" und "-samefile" führt dazu, dass beide aufgelistet werden. Wenn Sie "-L" nicht angeben, werden symbolischen Links nicht gefolgt (siehe "man find"). Dennis Williamson vor 14 Jahren 0
2
Ollie Saunders

If you don't have GNU Find you can do this:

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)" 

But it won't work for symbolic links.

Oh, ich sehe jetzt, dass diese Frage dies bereits beantwortet: http://superuser.com/questions/12972/to-see-hardlinks-by-ls Ollie Saunders vor 13 Jahren 1