Reparar links simbólicos quebrados para novo local

Reparar links simbólicos quebrados para novo local

Mudei de um servidor web antigo para um novo. Agora alguns links simbólicos não funcionam, porque alteramos a estrutura da pasta. Quero saber se existe uma maneira fácil de reparar esses links? Encontrei os links com este comando:

find -L . -type l -ls

Os links ficam assim:

./example/vondercode/releases/example.com/2.0/www/img/uploads -> /home/example/vondercode/uploads
./example2/www/img/uploads -> /home/example2/vondercode/uploads

Agora os links devem ficar assim:

./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

É tão fácil dizer que tudo /homedeveria ser substituído por /var/www/html Isso é possível?

Responder1

se for "basta substituir/home por/var/www/html", então esta abordagem deve funcionar:

find . -type l -exec sh -c 'lnk="{}"; target="$(readlink '{}' | sed 's#/home#/var/www/html#')"; unlink "${lnk}"; ln -s "${target}" "${lnk}" ' \;

Obrigado por Toby Speight apontar que a primeira versão não funcionou como esperado - isso foi corrigido agora.

Responder2

Eu escrevi uma ferramenta. Você pode usá-lo assim:

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

Veja todos os detalhes na minha resposta principal aqui:Como posso "revincular" muitos links simbólicos quebrados?

informação relacionada