ansible copy模块拷贝目录

遇到问题:

        通过ansible脚本从源服务器copy某个目录下的所有子目录和文件到目标服务器的目录,命令中的src和dest的目录路径最后结尾需不需要增加斜杠"/" ?

这种情况对应有下面四个命令:

ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages dest=/opt/update_packages"
ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages dest=/opt/update_packages/"
ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages/ dest=/opt/update_packages"
ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages/ dest=/opt/update_packages/"

实践结果:

ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages dest=/opt/update_packages"
ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages dest=/opt/update_packages/"

 上面两个命令的结果一致:

        目标服务器的/opt/update_packages创建了个子目录update_packages,将源服务器的update_packages做为一个整体copy到了目标服务器的目录下。

ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages/ dest=/opt/update_packages"
ansible -i /etc/ansible/hosts hosts_1 -m copy -a "src=/opt/myproject/update_packages/ dest=/opt/update_packages/"

上面两个命令的结果一致:

       复制源服务器/opt/myproject/update_packages目录内的内容(不包括目录本身),然后将这些内容复制到目标服务器目录路径/opt/update_packages下

原理:

简化版理解:当 src 是目录且以斜杠结尾时,Ansible 复制的是目录内的内容;当 src 不以斜杠结尾时,Ansible 复制的是整个目录(包括其名称)。

ansible官方文档:

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html

src:

如果路径是一个目录,则会递归复制它。在这种情况下,如果路径以“/”结尾,则仅复制该目录内的内容到目标位置。否则,如果路径不以“/”结尾,则会复制目录本身及其所有内容。这种行为类似于rsync命令行工具的行为。

dest:

如果源(src)是一个目录,目标(dest)也必须是一个目录。

如果目标(dest)是一个不存在的路径,并且目标(dest)以“/”结尾或者源(src)是一个目录,则会创建目标(dest)。

如果目标(dest)是一个相对路径,起始目录由远程主机确定。

如果源(src)和目标(dest)都是文件,目标(dest)的父目录不会被创建,并且如果父目录不存在,任务将失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值