古い Web サーバーから新しいサーバーに移動しました。フォルダー構造を変更したため、一部のシンボリック リンクが機能しなくなりました。これらのリンクを修復する簡単な方法があるかどうか知りたいです。次のコマンドでリンクを見つけました。
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
詳細は私の主な回答をご覧ください:多数の壊れたシンボリックリンクを「再リンク」するにはどうすればよいでしょうか?