Szenario:

Du hast in einem Verzeichnis /home/user1/blabla einen Haufen absolute symbolische Links, die alle auf Dateien in /home/user1/foofoo/* zeigen. Jetzt wechselst du den Rechner und hast plötzlich "user2" als Homeverzeichnis und nicht mehr "user1". Und alle symbolischen Links zeigen ins Leere, weil ja "/home/user1/foofoo" nicht mehr existiert.

Das folgende Skript konvertiert die Links in relative Links, so daß man - falls die Links und die Originale ihre Position zueinander nicht mehr ändern - das Problem nicht wieder hat, auch wenn man erneut wandern sollte.

Innerhalb einer Shell in das betroffene Verzeichnis wechseln (wo die kaputten Links liegen) und folgendes eintippen:

find . -type l -printf "%f %l\n" | \                  # gebe alle symbolischen Links aus
while read F L ; do
   L2=$(echo $L|sed 's,/home/user1/,,')               # Entferne das alte Homeverzeichnis aus dem Link
   test -f "../../$L2" && \                           # prüfe, ob die Datei im richtigen Verz. existiert
       ( rm -v "$F" ; ln -vs "../../$L2" "$F" )       # wenn ja, lege neuen (relativen) Link dorthin
done

Gegebenenfalls muss die Anzahl der Überverzeichnisse ("../") angepasst werden, so daß die Dateien gefunden werden.

JensBenecke