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.