Wie finde und liste ich alle symbolischen Links auf, die für eine bestimmte Datei erstellt wurden?

52

Ich hatte viele symbolische Links auf verschiedenen Pfaden für eine bestimmte Datei oder ein Verzeichnis erstellt. Ich möchte die gesamte Liste der erstellten symbolischen Verknüpfungspfade (Speicherort).

Beispiel:

Ich habe symbolische Links für ~/PicturesVerzeichnisse in vielen Verzeichnissen erstellt. Wie liste ich alle Symlinks zu diesem ~/PicturesVerzeichnis auf?

Ist das möglich? Wenn ja, wie?

Avinash Raj
quelle
Sie müssen eine umfassende Suche durchführen, da keine Anzahl gespeichert ist, wie bei Hardlinks. Sehen Sie eine der Antworten mit find.
Strg-Alt-Delor

Antworten:

42

Hier ist ein Beispiel:

find -L /dir/to/start -xtype l -samefile ~/Pictures

oder vielleicht besser:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

um einige Fehler wie Permission denied, loszuwerden Too many levels of symbolic links, oder File system loop detecteddie sie findauslösen, wenn sie nicht die richtigen Berechtigungen oder andere Situationen haben.

  • -L - Folgen Sie symbolischen Links.

  • -xtype l - Die Datei ist eine symbolische Verknüpfung

  • -samefile name- Datei bezieht sich auf den gleichen Inode wie name. In -Ldiesem Fall können symbolische Links enthalten sein.

Anmerkungen:

  • Verwenden Sie den Kleinbuchstaben L in -xtype lund nicht die Ziffer 1.
  • Unter macOS / Darwin -xtypeist -type.
Radu Rădeanu
quelle
Könnte der Befehl geändert werden, um einen symbolischen Link zu finden, der einen Pfad enthält? zB Dateien auf dem System, die auf ~ / Pictures / A, ~ / Pictures / A / B / C
verweisen
7

Sehr einfach, verwenden Sie die Option -lname:

find / -lname /path/to/original/dir

Von man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Hinweis : Denken Sie daran, dass symbolische Links überall vorhanden sein können, einschließlich eines Remote-Systems (wenn Sie Dateien freigeben), sodass Sie möglicherweise nicht alle finden können.

Abdennour TOUMI
quelle
Beachten Sie auch, dass, wenn der Symlink ein relativer Pfad ../dirist, er nicht das Absolute findet. /path/to/original/dirSie können stattdessen ein Muster verwenden und falsch positive -lname \*dir
Jason S
2

Versuche dies :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(Verzeichnisse mit der gleichen Inode- Nummer finden)

Es werden alle symbolischen Verknüpfungspfade angezeigt.

nux
quelle
4
Dies findet harte Links, keine symbolischen Links. Harte Links teilen sich Inode-Nummern. Symbolische Links haben unterschiedliche Inode-Nummern. Der Inode eines symbolischen Links hat einen Pfad anstelle einer Sperrliste.
Hildred
in der frage wurde kein harter oder weicher symbolischer link erwähnt
nux