![修复损坏的符号链接到新位置](https://linux22.com/image/170698/%E4%BF%AE%E5%A4%8D%E6%8D%9F%E5%9D%8F%E7%9A%84%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E5%88%B0%E6%96%B0%E4%BD%8D%E7%BD%AE.png)
我从旧的网络服务器转移到新的网络服务器。现在一些符号链接不起作用,因为我们更改了文件夹结构。我想知道是否有简单的方法来修复这些链接?我找到了带有此命令的链接:
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
请参阅我的主要答案中的完整详细信息:如何“重新链接”大量损坏的符号链接?