Alterar muitos links simbólicos de uma só vez?

1

Tenho cerca de 40 links simbólicos em um diretório semelhante a este:

lrwxr-xr-x    1 anna  staff    45B 22 Jun 11:20 menu-bg-left.jpg -> ../../../../../hg/www/images/menu-bg-left.jpg
lrwxr-xr-x    1 anna  staff    46B 22 Jun 11:20 menu-bg-right.jpg -> ../../../../../hg/www/images/menu-bg-right.jpg

Gostaria de alterá-los para um diretório diferente:

lrwxr-xr-x    1 anna  staff    45B 22 Jun 11:20 menu-bg-left.jpg -> ../../../../../code-local/www/images/menu-bg-left.jpg
lrwxr-xr-x    1 anna  staff    46B 22 Jun 11:20 menu-bg-right.jpg -> ../../../../../code-local/www/images/menu-bg-right.jpg

Por vários motivos, não posso apenas ligar simbolicamente o diretório hg ao diretório code-local , eu preciso alterar os próprios links.

Posso shell script isso de alguma forma?

    
por Richard 14.07.2011 / 16:19

2 respostas

2

Você altera o diretório dir para o diretório em que deseja que seus links sym sejam colocados. Então você lê todas as suas imagens do diretório de origem em um loop for. Com cada execução do loop, um link sym é criado.

#!/bin/bash
for file in /to/directory/where/symlinks/should/be/*
do
   rm $file
   ln -s /where/your/image/files/are/$(basename $file) $file
done
    
por 14.07.2011 / 16:30
0

Você pode usar uma combinação de readlink e shell, algo como:

#!/bin/sh
cd /to/directory/where/symlinks/should/be
for i in * ; do
    if [ -h $i ]; then
        NEWTARGET='readlink $i | sed 's,old/path/to/files,new/path/to/files,''
        rm -f $i
        ln -s $NEWTARGET $i
    fi
done
    
por 14.07.2011 / 16:47