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

如何通过Ansible Playbook解压多分段tar.gz文件?

如何用Ansible Playbook解压多分段tar.gz文件

我在Red Hat Linux 7.9的主目录下有以下两个分卷归档文件:

mydir.tar.gz.aa
mydir.tar.gz.ab

直接用Shell命令可以成功解压:

cat mydir.tar.gz.* | tar xzf -

这个多分段归档是通过以下命令生成的:

tar czf - * | split --bytes=5MB - mydir.tar.gz.

我尝试了几种Ansible Playbook写法,但都无效:

尝试1:用unarchive模块加通配符

---
- name: untar the multipart tar file
  hosts: localhost
  tasks:
  - name: untar
    ansible.builtin.unarchive:
      src: /home/McFly/mydir.tar.gz.a*
      dest: /home/McFly/
    become: yes
    become_user: root
...

尝试2:用unarchive模块指定单个分卷文件

---
- name: untar the multipart tar file
  hosts: localhost
  tasks:
  - name: untar
    ansible.builtin.unarchive:
      src: /home/McFly/mydir.tar.gz.aa
      dest: /home/McFly/
    become: yes
    become_user: root
...

尝试3:用shell模块执行解压命令

---
- name: untar the multipart tar file
  hosts: localhost
  tasks:
  - name: untar
    ansible.builtin.shell: cat mydir.tar.gz.* | tar xzf -
    args:
      chdir: /home/McFly/
      executable: /bin/bash
    become: yes
    become_user: root
...

问题原因分析

  1. unarchive模块的局限性:unarchive仅支持处理单个归档文件,既不能通过通配符匹配多个分卷文件,也无法自动合并分卷,因此前两种写法必然失败。
  2. 第三种shell写法的可能问题:
    • 切换为root用户后,/home/McFly/目录的权限可能限制root访问;
    • 未指定tar命令的绝对路径,可能在root的环境变量PATH中找不到正确的执行文件;
    • 若目录下存在其他匹配mydir.tar.gz.a*的文件,可能导致合并顺序出错。

正确的Ansible Playbook写法

方案1:以root身份执行(需确保目录权限允许)

直接用绝对路径指定分卷文件和tar命令,避免环境变量和权限问题:

---
- name: 解压多分段tar.gz文件
  hosts: localhost
  tasks:
    - name: 合并并解压分卷归档
      ansible.builtin.shell: cat /home/McFly/mydir.tar.gz.a* | /bin/tar xzf - -C /home/McFly/
      become: yes
      become_user: root

方案2:以McFly用户身份执行(无需root权限)

如果文件和目录权限允许当前用户操作,可去掉become相关配置,直接在目标目录执行命令:

---
- name: 解压多分段tar.gz文件
  hosts: localhost
  tasks:
    - name: 合并并解压分卷归档
      ansible.builtin.shell: cat mydir.tar.gz.* | /bin/tar xzf -
      args:
        chdir: /home/McFly/

额外注意事项

  • 确保分卷文件命名顺序正确(aa、ab、ac...),split生成的文件默认按此顺序,cat mydir.tar.gz.a*会按字母顺序读取,不会出错;
  • 若担心通配符匹配异常,可明确指定分卷文件:cat mydir.tar.gz.aa mydir.tar.gz.ab;
  • 如需保留原文件权限,可在tar命令中添加-p参数:tar xzfp -。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:35:22