Este comando bash deve fazer isso por você:
find /home/user/public_html/qa/ -type l -lname '/home/user/public_html/dev/*' -printf 'ln -nsf "$(readlink "%p" | sed s/dev/qa/)" "$(echo "%p" | sed s/dev/qa/)"\n' > script.sh
Ele usa find
para identificar todos os arquivos no diretório qa
que são links simbólicos com um destino que está no diretório dev
e, para cada um, imprime um comando bash que substituirá o link por um link para o caminho equivalente em qa/
. Depois de executar isso, basta executar o script gerado com
bash script.sh
Você pode querer examiná-lo manualmente primeiro para ter certeza de que funcionou.
Aqui está uma versão mais detalhada do comando find
acima para facilitar a leitura (embora eu não necessariamente escrevesse assim na prática):
SRC_DIR="/home/user/public_html/qa"
OLD_TARGET="/home/user/public_html/dev"
SUB="s/dev/qa/"
find $SRC_DIR -type l \
-lname "$OLD_TARGET/*" -printf \
'ln -nsf "$(readlink "%p"|sed $SUB)" "$(echo "%p"|sed $SUB)"\n'\
> script.sh