Eu tenho um diretório particular cheio de outros diretórios organizados (nomeados) por data. Para facilitar a referência, eu tenho um link simbólico chamado current apontando para o mais recente.
No script que cria novos diretórios de data, desejo criar ou corrigir o link simbólico current para apontar para o diretório mais novo, uma vez criado.
Eu pensei que o comando apropriado seria apenas, por exemplo,
ln -fs 2017-03-01 current
Se o link simbólico current ainda não existir, isso funciona.
No entanto, se o link simbólico current já tiver sido criado (e apontar, digamos, no diretório 2017-02-28 ), isso não funcionará:
Em vez de remover o link simbólico current e criar um novo link simbólico current que aponta para 2017-03-01 , o resultado será um link simbólico quebrado chamado 2017-03-01 apontando para em si, descansando dentro do diretório 2017-02-28 (que é onde o link simbólico current apontou e ainda aponta).
Isso me deixou perplexo, então eu li as especificações de ln . Acontece que este é o comportamento esperado:
SYNOPSIS
ln [-fs] [-L|-P] source_file target_file
ln [-fs] [-L|-P] source_file... target_dir
DESCRIPTION
...
The second synopsis form shall be assumed when the final operand names an existing directory.
Parece, então, que não há nenhuma maneira de reenviar um symlink que atualmente aponta para um diretório para um novo alvo, onde o novo alvo tem um nome diferente do nome do symlink. Então, ln -fs não funciona da maneira que eu pensava.
Deve I rm current , ou existe outra abordagem que eu tenha negligenciado?