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

如何用Ansible Playbook仅复制新增或已修改的文件?

问题背景

我需要将src_directory目录下mfiles文件夹中的文件复制到dest_directory目录下的mfiles文件夹中,目前已有实现该功能的Ansible代码:

- name: 检查MYFILES是否存在(统计文件数量)
    shell: ls -1 {{ src_directory }}/mfiles/ | wc -l
    register: exist_mfiles
    delegate_to: localhost
    run_once: true
 
  - name: 复制MYFILES
    copy:
     src: "{{ src_directory }}/mfiles/"
     dest: "{{ dest_directory }}/mfiles/"
     force: yes
     mode: '664'
    when: exist_mfiles.stdout != "0"

存在的问题

这些文件数量多且体积庞大,当出现连接错误时,重新复制所有文件会耗费大量时间。

技术问询

如何通过Ansible Playbook仅复制新增或已修改的文件?


解决方案

1. 调整copy模块参数(简单直接)

你当前设置了force: yes,这会强制覆盖所有文件,不管内容是否变化。copy模块默认会对比源文件和目标文件的校验和,只有当文件新增或修改时才会同步,所以直接移除force: yes即可实现增量复制:

- name: 检查MYFILES是否存在(统计文件数量)
    shell: ls -1 {{ src_directory }}/mfiles/ | wc -l
    register: exist_mfiles
    delegate_to: localhost
    run_once: true
 
  - name: 增量复制MYFILES
    copy:
     src: "{{ src_directory }}/mfiles/"
     dest: "{{ dest_directory }}/mfiles/"
     mode: '664'
    when: exist_mfiles.stdout != "0"

2. 使用synchronize模块(大文件/大量文件推荐)

synchronize基于rsync实现,天生支持高效增量同步,适合大体积、多数量文件的场景,还能保留文件属性、处理软链接等:

- name: 检查MYFILES是否存在(统计文件数量)
    shell: ls -1 {{ src_directory }}/mfiles/ | wc -l
    register: exist_mfiles
    delegate_to: localhost
    run_once: true
 
  - name: 用rsync增量同步MYFILES
    synchronize:
      src: "{{ src_directory }}/mfiles/"
      dest: "{{ dest_directory }}/mfiles/"
      mode: push  # 从控制端推送到目标节点,拉取则设为pull
      rsync_opts:
        - "--chmod=664"  # 强制设置文件权限为664
    when: exist_mfiles.stdout != "0"

注意:目标节点和控制端都需要安装rsync。

3. 优化文件存在性检查(更可靠)

原有的ls | wc -l在目录不存在时会报错,改用find模块更安全,能准确判断目录是否存在且有文件:

- name: 检查mfiles目录是否存在且非空
    find:
      paths: "{{ src_directory }}/mfiles/"
      file_type: file
    register: mfiles_exists
    delegate_to: localhost
    run_once: true
 
  - name: 增量复制MYFILES
    copy:
     src: "{{ src_directory }}/mfiles/"
     dest: "{{ dest_directory }}/mfiles/"
     mode: '664'
    when: mfiles_exists.matched > 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:18