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
DigitalRoss
quelle
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
Dogbane
quelle
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
Nik
quelle