修復損壞的符號連結到新位置

修復損壞的符號連結到新位置

我從舊的網頁伺服器轉移到新的網頁伺服器。現在一些符號連結不起作用,因為我們更改了資料夾結構。我想知道是否有簡單的方法可以修復這些連結?我找到了帶有此命令的連結:

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 Is this possible?

答案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}" ' \;

感謝 Toby Speight 指出第一個版本沒有按預期工作 - 現在已修復。

答案2

我寫了一個工具。你可以這樣使用它:

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

請參閱我的主要答案中的完整詳細資訊:如何「重新連結」大量損壞的符號連結?

相關內容