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

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

既存の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

私の主な答えで詳細を確認してください。複数の壊れたシンボリックリンクを「再接続」する方法は?

関連情報