HomeSoftwareSpieleMusikForum

Linkziel ausgeben

Wohin zeigt ein symbolischer Link? Dumme Frage, könnte man denken, schließlich lässt sich das Ziel mit ls -l anzeigen. Doch so einfach ist es nicht immer. Angezeigt wird mit diesem Kommando nur das unmittelbare Ziel. Das kann aber ebenfalls ein symbolischer Link sein, der wieder auf einen Link zeigt usw.; tatsächlich kann sich hinter jedem Dateinamen eine beliebig lange Verweiskette verbergen. Welcher Pfadname am Ende dieser Kette steht, ist der ls-Ausgabe nicht zu entnehmen.

Auf vielen System gibt es dafür ein Kommando readlink, das mit der Option -e aufgerufen das Endziel ausgibt. Ansonsten hilft die folgende Funktion getlink, die. Aufruf:

getlink [-l] pfad

Ohne Option gibt sie das unmittelbare Verweisziel unverändert aus, ähnlich wie ls -l. Wenn pfad kein Link ist, wird der Parameter selber ausgegeben. Bei Angabe von -l verfolgt sie die bei pfad beginnende Verweiskette bis zu ihrem Ende und gibt das letzte Ziel aus [1]. Der Returncode ist 0, wenn alle Verweisziele existieren, sonst 1.

Alle Pfade werden in normalisierter Form ausgegeben, d.h. sie enthalten keine Komponente .. oder . mehr.


[1] Dank an Greg Wooledge für einige Hinweise, wie sich selbst krankhafte Dateinamen wie 'a->b' oder solche mit anhängenden Zeilenvorschüben behandeln lassen

up
Created 2011-08-11 by mopcoge