正在将文件夹的全部内容(包括子文件夹)复制到目标



我正在使用ansible将.js文件从本地机器移动到ec2开发环境,并且在复制整个文件夹结构时遇到问题。

我正在使用以下任务来移动文件,并且似乎遇到了一个问题,即只有直接位于dist文件夹中的文件被复制。我需要将包括子文件和文件夹在内的整个文件夹复制到目标文件夹。

- name: Copy each file over that matches the given pattern
copy:
src: "{{ item }}"
dest: "/home/admin/microservice/dist"
owner: "admin"
group: "admin"
force: "yes"
recurse: "true"
mode: 0755
with_fileglob:
- "/Users/myfolder/WebStormProjects/project/microservice/dist/*.js"

我需要将整个文件夹内容从源复制到目标,包括子文件夹和文件吗?我可以做些什么来修复此任务以实现此目标?

使用copy模块,问题的解决方案将比您想象的要复杂得多,因为:

  • 您无法在单个globbing操作((中匹配目录和*.js文件

  • 即使可以,也不能使用相同的"复制"操作来复制文件和创建目录(注意:创建目录,而不是复制!因为后者意味着复制所有文件(。

您需要分别处理目录和文件(请参阅本答案第一次修订版中的实现(。


使用rsync,解决方案更加简洁,只需要设置适当的过滤器--include='*/' --include='*.js' --exclude='*'

在Ansible:中实现这一点的synchronize任务

- synchronize:
src: /source/Users/myfolder/WebStormProjects/project/microservice/dist/
dest: /home/admin/microservice/dist/
rsync_opts:
- --include=*/
- --include=*.js
- --exclude=*

注意1:重要的是不要为rsync_opts中的过滤值添加引号

注意2:您可能仍然需要设置适当的所有权和权限

首先在这里使用复制模块应该不是理想的,因为"复制模块递归复制功能不会扩展到很多(>数百(个文件。有关替代方案,请参阅synchronize模块,它是rsync的包装器。">

复制模块文档

同步模块文档

但是,您可以使用复制模块执行以下操作::

copy:
src: "{{ item }}"
dest: /home/admin/microservice/dist
with_lines: "find /home/admin/microservice/dist -type f -name *.js "

类似地,您可以尝试使用"同步"模块,如下所示::

synchronize:
src: "{{ item }}"
dest: /home/admin/microservice/dist
with_lines: "find /home/admin/microservice/dist -type f -name *.js "

如果你想保留目录布局,你可以如下所述::

在步骤1=>您将把父目录结构中所需的模式文件复制到临时目录中。

Step2=>然后您需要将临时目录复制到目标中。病房之后,你可以删除临时目录或任何你的用例。

- name: copy pattern files and directory into a temp directory shell: find . -type f -name "*.js" | cpio -pvdmB /temp/dir/ args: chdir: "/Users/myfolder/WebStormProjects/project/microservice/dist/" - name: Copy the temp directory recursively to destination directory copy: src: "/temp/dir/" dest: "/home/admin/microservice/dist/" owner: "admin" group: "admin" force: "yes" mode: 0755

相关内容

最新更新