既存のWebサーバーから新しい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
私の主な答えで詳細を確認してください。複数の壊れたシンボリックリンクを「再接続」する方法は?