You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible如何对比两个目录并保证copy模块同步后目录内容完全一致

问题原因

Ansible 原生的copy模块默认仅同步源路径下新增、修改的文件到目标路径,不会删除目标路径中源路径不存在的文件,因此你删除源目录的9.txt后再次执行原有playbook,目标目录/tmp/data不会产生任何变动。


解决方案

方案1:使用synchronize模块(推荐)

synchronize模块底层基于rsync实现,原生支持目录完全同步,开启delete参数即可自动删除目标路径下源路径不存在的内容,执行效率远高于先删后拷的方案。
Playbook示例如下:

---
- hosts: localhost

  tasks:
  - name: 完全同步源目录到目标路径
    synchronize:
      src: /tmp/test1/
      dest: /tmp/data/
      delete: yes

参数说明:

  • 源路径末尾加/表示同步目录内的内容,而非将test1目录本身整体复制到目标路径下
  • delete: yes开启同步删除逻辑,确保两边目录内容完全一致

首次执行前可在ansible-playbook命令后加--check参数执行预演,确认操作符合预期再正式执行,避免误删文件。

方案2:先清空目标目录再复制

如果环境限制无法使用synchronize模块,可先删除目标目录再执行copy操作,适合小容量目录场景:

---
- hosts: localhost

  tasks:
  - name: 删除原有目标目录
    file:
      path: /tmp/data
      state: absent
  - name: 重新复制源目录到目标路径
    copy:
      src: /tmp/test1
      dest: /tmp/data

内容的提问来源于stack exchange,提问作者yayun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:51:03