Como eu posso mudar todo o symlink para o novo caminho [duplicado]

0

Por favor, quero mudar o symlink para o novo caminho
Meu link simbólico está neste formulário

lrwxrwxrwx. 1 s01 s01 56 Mar 22 13:17 zmjppcxlpq2m.png -> /home/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m
lrwxrwxrwx. 1 s01 s01 56 Mar 23 17:03 znviy3civtq3.jpg -> /home/s01/public_html/cgi-bin/uploads/00029/znviy3civtq3
lrwxrwxrwx. 1 s01 s01 56 Mar 24 20:07 zoi46hh4pu32.jpg -> /home/s01/public_html/cgi-bin/uploads/00029/zoi46hh4pu32
lrwxrwxrwx. 1 s01 s01 56 Mar 23 18:22 zqt0h1gy9e4c.png -> /home/s01/public_html/cgi-bin/uploads/00029/zqt0h1gy9e4c

Transferi todos os arquivos para uma nova parte de /home para /home2

Por isso, quero alterar todos os links simbólicos para o novo caminho. Ex: antigo:

zmjppcxlpq2m.png -> /home/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m

Eu quero ter

zmjppcxlpq2m.png -> /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m

para todos os arquivos. o que eu posso fazer?

    
por Gilles 28.03.2015 / 03:08

1 resposta

1

Você pode alterar o alvo de um link sem excluí-lo, forçando ln a fazer isso.

ln -f -s /new/location/to/link newlink

Por exemplo:

ln -f -s /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m zmjppcxlpq2m.png

ou você pode fazer uma substituição atômica com mv:

ln -s /home2/s01/public_html/cgi-bin/uploads/00029/zmjppcxlpq2m new_zmjppcxlpq2m.png
mv new_zmjppcxlpq2m.png zmjppcxlpq2m.png

Para alterar todos os links em algum diretório, tente com algo semelhante a:

find /dir/with/symlinks/ -lname "/home/s01/public_html/cgi-bin/uploads/00029/*" \
    -exec  sh -c 'ln -sf 'echo $(readlink $0) | sed s/home/home2/' $0' {} \;

tenha cuidado ao fazer backup de todos os links simbólicos antes de executar qualquer comando

    
por 28.03.2015 / 03:17