Zum Inhalt springen

Softlink/Problembehebung

Aus Foxwiki

Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens foo.txt zu finden, dann ist dies der einzige gute Weg:

find -L / -samefile path/to/foo.txt

Wenn Sie hingegen nur nach Verknüpfungen zu einer beliebigen Datei suchen, die zufällig foo.txt heißt, dann ist etwas wie

find / -lname foo.txt

oder

find . -lname \*foo.txt

das Problem mit den ignorierten führenden Pfadnamenkomponenten

  • wunderbar gelöst. Vielen Dank an alle, die geantwortet haben.

Wie ich in einem gelöschten Kommentar angemerkt habe, können Sie -xtype l verwenden, um nur die Liste der Symlinks zu finden

  • Sie können eine Rekursion durchführen, da jede der Dateien, die auf foo.txt verweisen, selbst von einigen anderen Links referenziert werden kann ... z. B.: A->B->foo.txt, /tmp/C->B->foo.txt und weitere

Dies kann auch funktionieren, wenn Ihr Namensbestandteil ein übergeordnetes Verzeichnis ist, das im Link genannt wird, indem Sie

 find . -lname '*foo.dir*'

(entspricht z.&nbsp:B.&nbsp:file.txt -> ../foo.dir/file.txt)

Diese Antwort ist wirklich hilfreich, vielen Dank. Übrigens, wenn wir mehr Informationen über die Ergebnisse von "find" erhalten möchten, können wir die Ausgabe von "find" an "ls" übergeben

 find -L /usr -samefile /usr/share/pyshared/lsb_release.py 2>/dev/null | xargs ls -al

Ermitteln Sie die Inode-Nummer der Datei und suchen Sie dann nach allen Dateien mit derselben Inode-Nummer

ls -i foo.txt
41525360 foo.txt
 
find . -follow -inum 41525360

Alternativ können Sie die Option lname von find verwenden, aber dies funktioniert nicht, wenn Sie relative symbolische Links haben, z. B. a -> ../foo.txt

find . -lname /path/to/foo.txt*

Wenn Sie eine aktuelle Version von GNU find verwenden, können Sie auch die Option -samefile mit -L verwenden, um den gleichen Effekt zu erzielen, ohne selbst nach der Inode suchen zu müssen

  • Dadurch werden jedoch auch Dateien auf anderen Dateisystemen gefunden, die zufällig dieselbe Inode-Nummer haben.
  • Wenn foo ein Verzeichnis ist, verwenden Sie ln -di, in einer Zeile:
find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)

Diese Antwort ist falsch

  • Ein symbolischer Link hat nicht dieselbe Inode wie sein Ziel. Dies funktioniert nur für eine Datei in einem Ordner mit symbolischem Link. Aber danach wurde nicht gefragt.

Das symlinks-Dienstprogramm aknn auch bei der Suche nach defekten symbolischen Links nützlich sein.