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.