Ich bin von einem alten Webserver auf einen neuen umgezogen. Jetzt funktionieren einige Symlinks nicht mehr, weil wir die Ordnerstruktur geändert haben. Ich möchte wissen, ob es eine einfache Möglichkeit gibt, diese Links zu reparieren. Ich habe die Links mit diesem Befehl gefunden:
find -L . -type l -ls
Die Links sehen folgendermaßen aus:
./example/vondercode/releases/example.com/2.0/www/img/uploads -> /home/example/vondercode/uploads
./example2/www/img/uploads -> /home/example2/vondercode/uploads
Nun müssen die Links folgendermaßen aussehen:
./example/vondercode/releases/example.com/2.0/www/img/uploads -> /var/www/html/example/vondercode/uploads
./example2/www/img/uploads -> /var/www/html/example2/vondercode/uploads
So einfach ist das gesagt, alles /home
sollte durch „ /var/www/html
Ist das möglich?“ ersetzt werden.
Antwort1
wenn es heißt „ersetzen Sie einfach /home durch /var/www/html“, dann sollte dieser Ansatz funktionieren:
find . -type l -exec sh -c 'lnk="{}"; target="$(readlink '{}' | sed 's#/home#/var/www/html#')"; unlink "${lnk}"; ln -s "${target}" "${lnk}" ' \;
Vielen Dank an Toby Speight für den Hinweis, dass die erste Version nicht wie erwartet funktionierte – das ist jetzt behoben.
Antwort2
Ich habe ein Tool geschrieben. Du kannst es folgendermaßen verwenden:
fix_broken_symlinks . /home /var/www/html --force
Ausführliche Informationen finden Sie in meiner Hauptantwort hier:Wie kann ich viele defekte symbolische Links „neu verknüpfen“?