Eu tenho um diretório específico cheio de outros diretórios organizados (nomeados) por data. Para facilitar a referência, 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 current
link simbólico para apontar para o diretório mais novo depois de criado.
Eu pensei que o comando apropriado seria apenas, por exemplo,
ln -fs 2017-03-01 current
Se o current
link simbólico ainda não existir, isso funcionará.
No entanto, se o current
link simbólico já foi criado (e aponta, digamos, no diretório 2017-02-28
), isso não funciona:
Em vez de remover o link simbólico current
e criando uma nova ligação simbólica current
que aponta para 2017-03-01
o resultado, ao contrário, ser uma ligação simbólica quebrada chamada 2017-03-01
apontando para si mesmo, descansando dentro do diretório 2017-02-28
(que é onde o link simbólico current
apontou e ainda pontos).
Isso me deixou perplexo, então eu li as especificações paraln
. Acontece que este é um comportamento esperado:
SINOPSE
ln [-fs] [-L|-P] source_file target_file ln [-fs] [-L|-P] source_file... target_dir
DESCRIÇÃO
...
O segundo formulário de sinopse deve ser assumido quando o operando final nomear um diretório existente.
Parece, então, que não há como nomear um link simbólico que atualmente aponta para um diretório para um novo destino, onde o novo destino tem um nome diferente do nome do link simbólico. Portanto ln -fs
, não funciona da maneira que eu pensava.
Must I rm current
, ou há uma outra abordagem que eu tenha esquecido?