修复损坏的符号链接到新位置

修复损坏的符号链接到新位置

我从旧的网络服务器转移到新的网络服务器。现在一些符号链接不起作用,因为我们更改了文件夹结构。我想知道是否有简单的方法来修复这些链接?我找到了带有此命令的链接:

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

请参阅我的主要答案中的完整详细信息:如何“重新链接”大量损坏的符号链接?

相关内容