答案1
最好的选择可能是使用synchronize
模块。
synchronize 是 rsync 命令的包装器,旨在使使用 rsync 的常见任务更容易。
而该copy
模块使用 Python 复制文件,功能有限。
复制模块文档:
“copy”模块的递归复制功能无法扩展到大量(>数百个)文件。有关替代方案,请参阅synchronize模块,它是rsync的包装器。
通过该synchronize
模块,可以将exclude
模式传递rsync_opts
给rsync
Ansible 正在执行的命令。
# Synchronize passing in extra rsync options
synchronize:
src: /tmp/helloworld
dest: /var/www/helloword
rsync_opts:
- "--exclude=.git"
但synchronize
模块有一些警告。就像在本地和远程机器上安装的要求一样rsync
。这就是为什么当不需要时我不会使用它。
答案2
如果我不得不使用copy
,我会这样做。在这个例子中,我使用的patterns
是特定于 Python 的和.hiddenfile
(我使用 hidden 来演示 find 有很多选项可以探索)。然而,基本的想法是 - 你可以随意使用模式/正则表达式过滤器来满足你的需求。
- name: prepare a list of files to copy from some place
find:
paths: /var/some-place
hidden: yes
patterns:
- "*.py"
- ".hiddenfile"
delegate_to: localhost
register: target_files
- name: copy files to other place
copy:
src: "{{ item.path }}"
dest: /var/other-place
with_items: "{{ target_files.files }}"
tags:
- copy