Este comando deve funcionar:
find -type l -exec bash -c 'ln -f "$(readlink -m "$0")" "$0"' {} \;
Como funciona:
-
find -type l
localiza todos os links no diretório atual. -
-exec bash -c '...' {} \;
chama o bash para executar...
.Ele passa
{}
- o nome do link que está sendo processado no momento & traço; como um argumento, que o bash pode acessar como$0
. -
readlink -m "$0"
retorna o caminho absoluto do destino do link simbólico. -
ln -f "$(readlink -m "$0")" "$0"
overwrites (-f
) o link simbólico$0
com um link físico para seu destino.
Se o link não puder ser convertido por algum motivo, ele permanecerá intacto e ln imprimirá uma mensagem de erro.