我從舊的網頁伺服器轉移到新的網頁伺服器。現在一些符號連結不起作用,因為我們更改了資料夾結構。我想知道是否有簡單的方法可以修復這些連結?我找到了帶有此命令的連結:
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
請參閱我的主要答案中的完整詳細資訊:如何「重新連結」大量損壞的符號連結?