我正在运行 ansible 任务(在角色内):
- name: Rename dir
become: yes
shell: mv /data/files/1.6.5 /data/files/1.7.0
预期的效果是1.6.5
重命名为1.7.0
现在,在目标主机上,在一个实例中我已经1.7.0
存在:
~$ 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
所以运行上面的命令,我得到了将 1.6.5 移动到 1.7.0而不是重命名它的尴尬结果。
这是为什么?这是不直观的。1.6.5
不是空的,也不是1.7.0
。
只是确保我没有遗漏一些明显的东西。或者这绝对不可能?我是从其他原因得到的吗?我只是看到了这样一个事实,即我现在拥有1.6.5
内部1.7.0
并进行取证以了解为什么会这样。
该
mv
命令不会检查目标文件夹是否存在。如果它不存在,它将重命名源文件夹。否则,它只会假设假装的结果是将源移动到目的地。从
mv
手册页:因此,如果您不希望这种情况发生,您可以在 Ansible playbook 上添加检查以验证目标文件夹是否已存在,然后仅在不存在时移动该文件夹:
这样,您将避免意外移动到预先存在的文件夹中。