Reparieren Sie defekte symbolische Links zum neuen Speicherort

Reparieren Sie defekte symbolische Links zum neuen Speicherort

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 /homesollte 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“?

verwandte Informationen