壊れたシンボリックリンクを新しい場所に修復する

壊れたシンボリックリンクを新しい場所に修復する

古い W​​eb サーバーから新しいサーバーに移動しました。フォルダー構造を変更したため、一部のシンボリック リンクが機能しなくなりました。これらのリンクを修復する簡単な方法があるかどうか知りたいです。次のコマンドでリンクを見つけました。

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

最初のバージョンが期待どおりに動作しなかったことを指摘してくれた Toby Speight に感謝します。これは現在修正されています。

答え2

ツールを書きました。次のように使用できます。

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

詳細は私の主な回答をご覧ください:多数の壊れたシンボリックリンクを「再リンク」するにはどうすればよいでしょうか?

関連情報