Escrevi um script de link simbólico para alguém de outra equipe executar em um diretório ao qual não tenho acesso e parecia ter causado algo inesperado.
destination_path=/path/to/dest/
source_path=/path/to/src
for dir in first second
do
# replace existing symlink
for subdir in {1000..1020}
do
ln -sf $source_path/$dir/$subdir $destination_path/$dir/$subdir
done
done
Antes de o script ser executado, path/to/dest/$dir
ele contém links simbólicos 1000, 1001, ..., 1020
vinculados a um conjunto diferente de diretórios. Meu script destina-se a substituir esses links simbólicos por links simbólicos para /path/to/src/$dir/$subdir
, mas, em vez de fazer isso, parece ter criado os links simbólicos dentro do link simbólico existente.
Por exemplo, /path/to/dest/$dir/1000
costumava ser um link simbólico e, depois de executar meu script /path/to/dest/$dir/1000
, ainda aponta para o mesmo lugar, mas dentro de /path/to/dest/$dir/1000
, há um link simbólico 1000
que aponta para $source_path/$dir/$subdir/1000
.
Isso não deveria ter ocorrido com meu script certo? Tentei reproduzir isso localmente com uma estrutura de diretório de destino simulada e não consegui reproduzir esse problema.
Editar: após uma pesquisa mais aprofundada, parece que eu deveria ter usado ln -sfn
em vez de apenas ln -sf
? Qual é a maneira mais fácil de remediar isso?
Um link simbólico que aponta para um diretório é (quase sempre) tratado como esse diretório. Em geral, se você deseja atualizar um link simbólico, remova-o e recrie-o.
Use uma variação do seu script como esta,
Lembre-se de remover todas as três instâncias de
echo
quando você está feliz que ele fará o que você precisa.