Zum Inhalt springen

Softlink/Problembehebung: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:


== Alle Links finden ==
== Alle Links finden ==
Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens <tt>foo.txt zu finden,</tt> dann ist dies der einzige gute Weg:
Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens foo.txt zu finden, dann ist dies der einzige gute Weg:
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line>
find -L / -samefile path/to/foo.txt
find -L / -samefile path/to/foo.txt
</syntaxhighlight>
</syntaxhighlight>


Wenn Sie hingegen nur nach Verknüpfungen zu einer beliebigen Datei suchen, die zufällig <tt>foo.txt</tt> heißt, dann ist etwas wie
Wenn Sie hingegen nur nach Verknüpfungen zu einer beliebigen Datei suchen, die zufällig foo.txt heißt, dann ist etwas wie
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line>
find / -lname foo.txt
find / -lname foo.txt
Zeile 18: Zeile 18:
* wunderbar gelöst. Vielen Dank an alle, die geantwortet haben.
* wunderbar gelöst. Vielen Dank an alle, die geantwortet haben.


Wie ich in einem gelöschten Kommentar angemerkt habe, können Sie <tt>-xtype l</tt> verwenden, um nur die Liste der Symlinks zu finden  
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 usw.  
* 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 usw.  


Zeile 42: Zeile 42:
</syntaxhighlight>
</syntaxhighlight>


Alternativ können Sie die Option <tt>lname</tt> von <tt>find</tt> verwenden, aber dies funktioniert nicht, wenn Sie relative symbolische Links haben, z. B. <tt>a -> ../foo.txt</tt>
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
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line>
find . -lname /path/to/foo.txt*  
find . -lname /path/to/foo.txt*  
</syntaxhighlight>
</syntaxhighlight>


Wenn Sie eine aktuelle Version von GNU find verwenden, können Sie auch die Option <tt>-samefile</tt> mit <tt>-L</tt> verwenden, um den gleichen Effekt zu erzielen, ohne selbst nach der Inode suchen zu müssen  
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.  
* Dadurch werden jedoch auch Dateien auf anderen Dateisystemen gefunden, die zufällig dieselbe Inode-Nummer haben.  
* Wenn <tt>foo</tt> ein Verzeichnis ist, verwenden Sie <tt>ln -di</tt>, in einer Zeile: <tt>
* Wenn foo ein Verzeichnis ist, verwenden Sie ln -di, in einer Zeile:  
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line>
find . -follow -inum $(ls -di foo.txt |cut -d“ “ -f1)</tt>
find . -follow -inum $(ls -di foo.txt |cut -d“ “ -f1)  
</syntaxhighlight>
</syntaxhighlight>



Version vom 21. Februar 2025, 21:04 Uhr

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 usw.

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.