ich habe
link -> file
ich mache
find -L . -name 'link'
Und bekomme
./link
Warum das?
Mannentdeckung sagt:
-L: Folgen Sie symbolischen Links. Wenn find Informationen zu Dateien prüft oder druckt, werden die verwendeten Informationen aus den Eigenschaften der Datei entnommen, auf die der Link verweist, nicht aus dem Link selbst (es sei denn, es handelt sich um einen unterbrochenen symbolischen Link oder einen Fund, der die Datei nicht prüfen kann auf die der Link verweist).
Die allgemeine Regel lautet, dass, wenn ein Befehl Verknüpfungen bearbeitet (dh Verzeichniseinträge, die auf Inodes verweisen), der Befehl Symlinks eher als sich selbst als als das Objekt behandelt, auf das der Link verweist. Andernfalls wird der Befehl auf das ausgeführt, auf das der Symlink verweist. So
cp
folgt Symlinks standardmäßig und kopiert den Inhalt der Datei durch den Link wies auf. Wenn Sie jedochcp
aufgefordert werden, Verzeichniseinträge durch Angabe von zu bearbeiten-R
, werden keine Symlinks mehr verfolgt.mv
Funktioniert immer mit Verzeichniseinträgen und folgt daher niemals Symlinks.Die
find
normale Aktivität des Befehls besteht darin, Verzeichniseinträge zu bearbeiten, sodass Symlinks standardmäßig nicht gefolgt werden. Das Hinzufügen von-L
Ursachenfind
für das Verfolgen von Symlinks für alle Eigenschaften mit Ausnahme derjenigen, die bei der Verzeichnissuche nicht ignoriert werden können, ist der Name. Einer der Zwecke vonfind -name
ist, eine Eingabe für Befehle wiemv
und bereitzustellenrm
, die Verzeichniseinträge bearbeiten. Es würde unangenehme und überraschende Ergebnisse geben, wennfind -L dir -name
Namen erzeugt werden könnten, die außerhalb des Verzeichnisbaums verweisen, auf den verwurzelt istdir
.quelle
There would be unpleasant and surprising results if
find -L dir -name` könnte Namen erzeugen, die auf den Verzeichnisbaum außerhalb von dir verweisenfind dir -name pattern
. weil das Hinzufügen von -L das Zeigen auf eincp -R
dazu, Dinge unter einem Symlink zu kopieren?