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

如何修复Ansible中find查找文件后unarchive解压的任务报错问题

Ansible 先查找文件再解压任务修复方案

错误原因

  • 循环插件使用错误:with_fileglob 仅用于在Ansible控制节点本地匹配文件路径,你已经通过find模块获取到了目标主机的文件列表,直接遍历列表即可,不需要再调用文件匹配插件,传入列表给期望字符串参数的with_fileglob就是触发'list' object has no attribute 'rfind'报错的直接原因
  • 返回值取值错误:find模块返回的copied_file.files是字典列表,每个元素包含文件的元数据,不是直接的文件名,不能直接作为文件名拼接
  • 缺少必要参数:unarchive模块默认将src参数指向的路径判定为控制节点本地路径,要解压目标主机上已存在的压缩包,必须添加remote_src: yes参数

修正后代码

- name: find the file
  find:
    paths: /home/ec2-user/aa/
    pattern: "file-*.tar.gz"
  register: copied_file

- name: extract the file
  unarchive:
    src: "{{ item.path }}"
    dest: /home/ec2-user/bb/
    remote_src: yes
  loop: "{{ copied_file.files }}"
  # 可选配置:没有匹配到文件时自动跳过任务,避免报错
  when: copied_file.files | length > 0

补充说明

find返回的每个文件对象中,item.path已经是文件的完整绝对路径,不需要手动拼接路径前缀;如果需要手动拼接的场景,可以取item.basename获取文件名,再和前缀拼接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:02