如何用Ansible archive模块压缩时重命名打包的目录?
如何在Ansible压缩时重命名归档内的目录
Ansible的archive模块本身没有提供压缩过程中直接重命名归档内目录的功能,你可以通过以下两种方案实现需求:
方案一:调用系统zip命令(推荐)
利用系统原生的zip命令(需确保目标主机已安装zip工具),通过其--transform参数实现归档内目录的重命名,具体任务如下:
- name: 压缩my_dir并将归档内目录重命名为whatever command: zip -r ./dir.zip my_dir --transform 's/^my_dir/whatever/' args: chdir: "{{ playbook_dir }}" # 替换为你的实际工作目录,保证路径准确性
命令说明:
-r:递归压缩目录及所有子内容--transform 's/^my_dir/whatever/':通过正则替换规则,将归档根目录下的my_dir名称替换为whateverchdir:指定命令执行的工作目录,避免因相对路径导致的错误
方案二:临时软链接法
通过创建指向原目录的临时软链接,再用archive模块压缩软链接,最后清理软链接,这种方法不依赖外部命令,但需要主机支持符号链接:
- name: 创建临时软链接指向my_dir file: src: ./my_dir dest: ./whatever state: link - name: 压缩软链接对应的目录 archive: path: ./whatever dest: ./dir.zip format: zip - name: 删除临时软链接 file: path: ./whatever state: absent
注意事项:
- Windows系统使用软链接需要启用开发者模式或提升操作权限
- 软链接法会在主机上创建临时文件,需确保执行用户有足够的文件操作权限
内容的提问来源于stack exchange,提问作者Héctor Valls
相关产品推荐
相关产品推荐

