Links auf Datei finden in Linux?
Guten Tag,
ich benötige einen Shellbefehl der mit alle Softlinks auf eine Datei anzeigt. Dasselbe nochmal für Hartlinks.
Ich habe bis jetzt dieses hier gefunden zeigt allerdings alle an:
soft
find . -maxdepth 1 -type l -ls | awk '{print $11}'
hard
find . -links +1 ! -type d -print
Bin leider nicht sehr vertraut damit und weiß nicht ob oder wie man das vielleicht abändern kann.
Vielen Dank im Voraus
3 Antworten
Speziell bei der Hardlink-Frage muss man nochmal zwei Dinge unterscheiden:
Fall 1: Willst Du einfach alle(!) mehrfach verlinkten Dateien finden, egal welche Datei wozu gehört? Dann kannst Du das mit einem "find"-Statement machen.
Fall 2: Willst Du für eine bestimmte, konkrete Datei, wo Du schon weißt, dass n_links>1 ist, wissen, von wo noch auf genau diese(!) Datei verlinked wird? Dann bleibt Dir nichts anderes übrig, als das komplette Filesystem ab jeweiligem Mountpoint abzusuchen und jeweils einen stat() auf jede Datei mit n_links>1 zu machen, dann in der struct stat die Inodenummer zu vergleichen.
Für Fall 2 ist mir kein effizienter Weg in der Shell bekannt. Ich würde das mit einem C-Progrämmchen lösen, wenn ich sowas unbedingt bräuchte.
GNU find hat dazu die nützliche Option -samefile:
Finde alle Hard-Links zu einer Datei:
$ find / -samefile ~/sample.file
Finde alle Hard- und Soft-Links zu einer Datei:
$ find -L / -samefile ~/sample.file
Finde nur alle Soft-Links zu einer Datei:
$ find -L / -xtype l -samefile ~/sample.file
Du kannst den ersten Punkt im Befehl durch / ersetzen, das sucht im gesamten Verzeichnisbaum, aber das wird einige Zeit dauern.
============================================
Kommando zurück ich glaub das wird in dem Fall denke ich nichts helfen.
Aber lies dir mal das hier durch:
http://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file