Восстановить сломанные символические ссылки на новое место

Восстановить сломанные символические ссылки на новое место

Я переехал со старого веб-сервера на новый. Теперь некоторые симлинки не работают, потому что мы изменили структуру папок. Я хочу узнать, есть ли простой способ восстановить эти ссылки? Я нашел ссылки с помощью этой команды:

find -L . -type l -ls

Ссылки выглядят так:

./example/vondercode/releases/example.com/2.0/www/img/uploads -> /home/example/vondercode/uploads
./example2/www/img/uploads -> /home/example2/vondercode/uploads

Теперь ссылки должны выглядеть так:

./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

Так легко сказать, все /homeследует заменить на /var/www/html Возможно ли это?

решение1

если это «просто замените /home на /var/www/html», то этот подход должен работать:

find . -type l -exec sh -c 'lnk="{}"; target="$(readlink '{}' | sed 's#/home#/var/www/html#')"; unlink "${lnk}"; ln -s "${target}" "${lnk}" ' \;

Спасибо Тоби Спейту за то, что он указал на то, что первая версия не работала так, как ожидалось. Теперь это исправлено.

решение2

Я написал инструмент. Вы можете использовать его так:

fix_broken_symlinks . /home /var/www/html --force

Подробную информацию смотрите в моем основном ответе здесь:Как можно «перепривязать» множество неработающих символических ссылок?

Связанный контент