Você deve usar a opção -T
para isso, ele diz ln
para sempre tratar o nome do link como o nome do link desejado, nunca como um diretório.
Sem essa opção, se você der a ln
um nome de link que existe como um diretório, ele criará um novo link para o destino dentro desse diretório.
Note que -T
é um GNU-ismo (pelo menos, não é em POSIX), mas você já está usando -v
que também é um GNU-ismo, então imagino que não seja um problema.
Alternativamente, você pode apenas especificar o diretório pai como o nome do link, e o link sempre será (re) criado lá:
ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/
Isso funciona porque o seu link simbólico tem o mesmo nome que o alvo.