Estou executando uma tarefa ansible (dentro de uma função):
- name: Rename dir
become: yes
shell: mv /data/files/1.6.5 /data/files/1.7.0
O efeito pretendido é que 1.6.5
é renomeado para1.7.0
Agora, no host de destino, em uma instância eu já 1.7.0
existia:
~$ sudo ls -l /data/files/
total 1312
drwxr-x--- 2 ubuntu admin 643450 May 22 08:45 v1.6.5
drwxr-x--- 2 ubuntu admin 696320 May 25 10:19 v1.7.0
Então, executando o comando acima, tive o resultado estranho de mover 1.6.5 PARA 1.7.0 em vez de renomeá-lo.
Por que é que? Não é intuitivo. 1.6.5
não estava vazio, nem estava 1.7.0
.
Apenas me certificando de que não estou perdendo algo óbvio. Ou isso é absolutamente impossível? Eu consegui isso por algum outro motivo? Acabei de ser apresentado ao fato de que agora tenho 1.6.5
dentro 1.7.0
e fazendo perícia para entender por que isso acontece.
O
mv
comando não verificará se existe ou não uma pasta de destino. Se não existir, ele renomeará a pasta de origem. Caso contrário, ele apenas assumirá que o resultado fingido é mover a origem para o destino.Da página de
mv
manual:Portanto, se você não quiser que isso aconteça, você pode adicionar uma verificação no seu manual do Ansible para verificar se a pasta de destino já está presente e, em seguida, mova a pasta apenas se não estiver presente:
Dessa forma, você evitará a movimentação indesejada para uma pasta preexistente.