Я переехал со старого веб-сервера на новый. Теперь некоторые симлинки не работают, потому что мы изменили структуру папок. Я хочу узнать, есть ли простой способ восстановить эти ссылки? Я нашел ссылки с помощью этой команды:
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
Подробную информацию смотрите в моем основном ответе здесь:Как можно «перепривязать» множество неработающих символических ссылок?