Você pode usar a opção -f
, --force
de ln
para remover o link simbólico existente antes de criar o novo. Se o destino for um diretório, você precisará adicionar a opção -n
, --no-dereference
para informar ln
para tratar o symlink como um arquivo normal.
ln -sfn target existing_link
No entanto, esta operação não é atômica, já que ln
irá unlink()
do antigo link simbólico antes de chamar symlink()
, então, tecnicamente, não conta como alterar o valor do link. Se você se importa com essa distinção, a resposta é não, você não pode alterar o valor de um link simbólico existente.
Dito isso, você pode fazer algo parecido com o seguinte para criar um novo symlink, alterando parte do valor do link antigo:
ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"