You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写Ansible Playbook批量解压ZIP内嵌套的GZ文件

遍历解压ZIP内GZ文件的Ansible Playbook

直接上可复用的Playbook,分主Playbook和任务拆分文件,逻辑清晰好维护:

主Playbook(zip_extract_gz.yml)

- name: 批量处理ZIP中的GZ文件
  hosts: your_target_hosts  # 替换成你的目标主机组
  gather_facts: yes
  vars:
    zip_pattern: "metrics*.zip"  # 匹配你的ZIP文件名规则
    target_dir: "/data/metrics"  # GZ文件最终解压到这个目录
    temp_root: "/tmp/zip_temp"   # 临时解压ZIP的根目录

  tasks:
    - name: 找出所有符合规则的ZIP文件
      ansible.builtin.find:
        paths: "{{ target_dir }}"
        patterns: "{{ zip_pattern }}"
        file_type: file
      register: zip_list

    - name: 逐个处理每个ZIP文件
      ansible.builtin.include_tasks: process_zip.yml
      loop: "{{ zip_list.files }}"
      loop_control:
        loop_var: current_zip

子任务文件(process_zip.yml)

# 为当前ZIP创建专属临时目录,避免文件冲突
- name: 创建临时解压目录
  ansible.builtin.file:
    path: "{{ temp_root }}/{{ current_zip.path | basename | regex_replace('\\.zip$', '') }}"
    state: directory
    mode: '0755'
  register: temp_dir

# 把ZIP解压到临时目录
- name: 解压ZIP到临时目录
  ansible.builtin.unarchive:
    src: "{{ current_zip.path }}"
    dest: "{{ temp_dir.path }}"
    remote_src: yes

# 找出临时目录里的所有GZ文件
- name: 查找临时目录中的GZ文件
  ansible.builtin.find:
    paths: "{{ temp_dir.path }}"
    patterns: "*.gz"
    file_type: file
  register: gz_list

# 逐个解压GZ到目标目录,用gunzip -c保留原GZ文件(要删原GZ就去掉-c)
- name: 解压GZ文件到目标目录
  ansible.builtin.shell: gunzip -c "{{ item.path }}" > "{{ target_dir }}/{{ item.path | basename | regex_replace('\\.gz$', '') }}"
  loop: "{{ gz_list.files }}"
  args:
    executable: /bin/bash

# 清理临时目录
- name: 删除临时解压目录
  ansible.builtin.file:
    path: "{{ temp_dir.path }}"
    state: absent

# 可选:处理完删除原ZIP文件,需要的话取消注释并设置变量
# - name: 删除原ZIP文件
#   ansible.builtin.file:
#     path: "{{ current_zip.path }}"
#     state: absent
#   when: delete_source_zip | default(false)

关键说明

  • 替换your_target_hosts、target_dir等变量为你的实际环境值
  • 用专属临时目录避免多ZIP解压时文件重名冲突
  • gunzip -c会保留原GZ文件,如果不需要保留,直接用gunzip "{{ item.path }}"并调整解压路径即可
  • 如果ZIP里的GZ文件嵌套在子目录中,给find模块添加recurse: yes参数就能递归查找

内容的提问来源于stack exchange,提问作者user1913559

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:45:58