使用 Ansible 按扩展名复制文件 | AI生成和翻译

Home 2025.12

问题:如何使用Ansible playbook将*.sh*.ksh*.py文件从源目录递归复制到目标目录?

回答:

要将特定扩展名(.sh.ksh.py)的文件从源目录递归复制到目标目录,同时保留目录结构,请结合使用ansible.builtin.findansible.builtin.copy模块。单独的copy模块在递归复制时不支持按多个扩展名进行过滤。

这需要两个任务(正如你提到的,它可以分成两个):

  1. 使用find递归查找所有匹配的文件。
  2. 循环遍历结果并复制每个文件,保留相对路径。

这是一个示例 playbook(假设源和目标都在控制节点/localhost上;根据需要调整以用于远程主机):

---
- name: 递归复制特定脚本文件
  hosts: localhost  # 更改为你的目标主机
  vars:
    source_dir: /path/to/source
    dest_dir: /path/to/destination

  tasks:
    - name: 递归查找所有 .sh, .ksh, 和 .py 文件
      ansible.builtin.find:
        paths: ""
        recurse: yes
        file_type: file
        patterns:
          - "*.sh"
          - "*.ksh"
          - "*.py"
      register: script_files

    - name: 复制匹配文件到目标,保留目录结构
      ansible.builtin.copy:
        src: ""
        dest: "/"
        mode: preserve  # 可选:保留原始权限
      loop: ""
      when: script_files.matched > 0

主要解释:

替代方案:将所有文件扁平化到一个目标目录(不保留子目录)

copy任务中的dest更改为:

dest: "/"

参考资料:


Back

x-ai/grok-4.1-fast

Donate