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?