| Linkziel ändernLöscht oder verschiebt man eine Datei, die das Ziel eines oder mehrerer
    Links darstellt, zeigen die Links anschließend ins Leere. Die Folge können
    Programmabstürze und sonstige Unannehmlichkeiten sein. Um das zu vermeiden,
    müssen in einem solchen Fall alle auf diese Dateien verweisenden Links
    korrigiert werden. Allerdings setzt das voraus, dass man sie überhaupt
    kennt - was nicht immer der Fall ist. Hier gibt es ein Problem: Man kann
    zwar leicht feststellen, wohin ein Link zeigt (siehe getlink), aber man kann einer Datei nicht
    unmittelbar ansehen, ob und welche Links auf sie verweisen, denn
    es gibt keine Rückwärtsverweise. Die einzige Möglichkeit besteht darin, im
    Dateisystem (oder einem Teil davon) nach ihnen zu suchen.Das nachstehend beschriebene Script chglinkdient diesem Zweck.
    Es durchsucht ein vorgegebenes Verzeichnis nach Links, die auf ein
    bestimmtes Ziel verweisen, und gibt sie entweder aus oder ersetzt sie gleich durch
    Verweise auf ein anderes (vorzugsweise existierendes) Ziel. Aufruf:
     
     chglink [option...]verzeichnis zielAlt [zielNeu]
 
    Optionen:
     -h  Hilfe.
-l  Absolute Pfade vergleichen (s.u.).
-p  Partieller Vergleich (s.u.).
-r  Rekursiv.
-t  Test, Kommandos werden nur ausgegeben, nicht ausgeführt.
-v  Mit Protokoll.Der erste Dateiparameter ist das zu durchsuchende Verzeichnis, der zweite der alte
    Link, der dritte der neue. Fehlt der dritte Parameter, werden die gefundenen
    Links nicht geändert, sondern nur ausgegeben.
     Bei Angabe von -lwird zunächst das Endziel jedes existierenden Links
    ermittelt, und zwar mit Hilfe der Funktion getlink
    (diese muss definiert sein). Dieses Ziel wird dann mit dem absoluten Pfad vonzielAltverglichen. Bei Übereinstimmung ersetzt die Funktion das Ziel
    durch den absoluten Wert vonzielNeu. Ist die Option -pangegeben, werden alle Links geändert, die den TeilstringzielAltenthalten; dieser wird durchzielNeuersetzt. Die Ersetzung erfolgt nach beibashgültigen den Regeln der Expansion${parameter/pattern/string}: Ist das erste Zeichen inpatternein#, muss der
    Suchtext am Anfang des Strings stehen, ist es ein%, muss er am Ende stehen. Mit der Option -rwird das Verzeichnis rekursiv, d.h. inklusive aller Unterverzeichnisse
    durchsucht. Ohne die Option bezieht sich die Suche nur auf den direkten 
    Verzeichnisinhalt. Wenn die Option -tangegeben ist, wird eine Link-Ersetzung nicht durchgeführt,
    sondern das entsprechende Kommando nur ausgegeben. Auf diese Weise kann zunächst ein 
    Testlauf durchgeführt werden. Beispiele: 
     
    Alle Links im Verzeichnis dir1, die nach/home/dummy/blahzeigen,
    sollen durch einen Link auf../ah/ohersetzt werden.Man beachte, dass hier nur Links geändert werden, die direkt auf das
    Zielchglink dir1 /home/dummy/blah ../ah/oh/home/dummy/blahzeigen.
    Alle Links im aktuellen Verzeichnis und in allen Unterverzeichnissen, die physikalisch
    nach /usr/share/miau.pngzeigen, sollen durch einen Link auf den absoluten 
    Wert vonneu/wuff.pngersetzt werden.Hier werden auch alle Links erfasst, die über beliebig komplizierte Umwege aufchglink -lr . /usr/share/miau.png neu/wuff.png/usr/share/miau.pngverweisen. |