symbolischer Link: Finden Sie alle Dateien, die auf diese Datei verlinken


Antworten:


132

Es hängt davon ab, ob Sie versuchen, Links zu einer bestimmten aufgerufenen Datei zu finden. foo.txt,Dies ist der einzig gute Weg:

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

Auf der anderen Seite, wenn Sie nur versuchen, Links zu einer Datei zu finden , die zufällig benannt ist foo.txt, dann so etwas wie

find / -lname foo.txt

oder

find . -lname \*foo.txt # ignore leading pathname components

Problem schön gelöst. Vielen Dank an alle, die geantwortet haben.
Lukmac

8
Da ich eine gelöschte Antwort kommentiert habe, können Sie -xtype lnur
Listensymlinks

Möglicherweise möchten Sie erneut darauf zurückgreifen, da auf alle Dateien, die auf foo.txt verweisen, möglicherweise auch andere Links verweisen ... Beispiel: A-> B-> foo.txt, / tmp / C-> B-> foo.txt usw.
Olivier Dulac

Dies kann auch funktionieren, wenn Ihre Namenskomponente ein übergeordnetes Verzeichnis ist, das im Link benannt ist, indem Sie nach find . -lname '*foo.dir*'(Übereinstimmungen zB file.txt -> ../foo.dir/file.txt) suchen
Yonatan

22

Suchen Sie die Inode-Nummer der Datei und suchen Sie nach allen Dateien mit derselben Inode-Nummer:

$ ls -i foo.txt
41525360 foo.txt

$ find . -follow -inum 41525360

Versuchen Sie alternativ die lnameOption find, aber dies funktioniert nicht, wenn Sie relative Symlinks haben, za -> ../foo.txt

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

3
Wenn Sie eine aktuelle Version von GNU find verwenden, können Sie die -samefileOption auch -Lfür denselben Effekt verwenden, ohne die Inode selbst
nachschlagen zu müssen

5
Dies findet aber auch Dateien auf anderen Dateisystemen, die zufällig dieselbe Inode-Nummer haben.
DigitalRoss

Wenn fooes sich um ein Verzeichnis handelt, verwenden Sie ln -diin einer Zeile:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
rubo77

1
Diese Antwort ist falsch. Ein Symlink hat nicht den gleichen Inode wie sein Ziel. Dies funktioniert nur für eine Datei in einem verknüpften Ordner. Aber das wurde nicht gefragt.
Jules Lamur

4

Ich bevorzuge die Verwendung des symlinksDienstprogramms, das auch bei der Suche nach defekten Symlinks nützlich ist. Installation durch:

sudo apt install symlinks

Alle Symlinks im aktuellen Ordner und in den Unterordnern anzeigen:

symlinks -rv .
  • -r: rekursiv
  • -v: verbose (zeige alle Symlinks, nicht nur kaputte)

Um einen bestimmten Symlink zu finden, gehen Sie einfach wie folgt vor grep:

symlinks -rv . | grep foo.txt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.