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

如何在Ansible中从filetree变量提取子串并拆分文件路径

Ansible 文件路径拆分处理方案

我有如下目录结构:

└── custom_files
    ├── colors.js
    ├── favicon.ico
    └── img
        ├── icons
        │	├── android-icon-144x144.png
        │	└── favicon-16x16.png
        └── logo.svg

已通过以下Ansible代码将相对于inventory的文件路径输出到变量files_folder中:

custom_files_dir: "{{ inventory_dir }}/custom_files"

files_folder: "{{ lookup('community.general.filetree', custom_files_dir) |
                  selectattr('state', 'equalto', 'file') |
                  map(attribute='src') |
                  list | flatten | sort | select | unique |
                  map('replace', custom_files_dir, '') }}"

得到的结果为:

files_folder:
  - /colors.js
  - /favicon.ico
  - /img/icons/android-icon-144x144.png
  - /img/icons/favicon-16x16.png
  - /img/logo.svg

以下是针对两个需求的实现方案:

需求1:提取每个文件路径最后一个/之前的目录部分

使用Ansible内置的dirname过滤器,直接对files_folder中的每个路径处理:

file_dirs: "{{ files_folder | map('dirname') | list }}"

执行后输出:

file_dirs:
  - /
  - /
  - /img/icons
  - /img/icons
  - /img

如果希望根目录对应的结果为空字符串而非/,可以追加replace过滤器:

file_dirs: "{{ files_folder | map('dirname') | map('replace', '/', '') | list }}"

处理后结果:

file_dirs:
  - ''
  - ''
  - img/icons
  - img/icons
  - img

需求2:拆分路径为目录和文件名的二维数组

结合dirname和basename过滤器,分别提取目录与文件名并组合成二维数组。这里提供两种写法:

写法1:单变量赋值

file_path_pairs: "{{ files_folder | map('zip', files_folder | map('dirname') | map('replace', '/', '', 1), files_folder | map('basename')) | map('list') | list }}"

写法2:循环构建数组(可读性更强)

- set_fact:
    file_path_pairs: []

- set_fact:
    file_path_pairs: "{{ file_path_pairs + [ [ item | dirname | replace('/', '', 1), item | basename ] ] }}"
  loop: "{{ files_folder }}"

两种写法最终都会得到目标结果:

file_path_pairs:
  - ['', 'colors.js']
  - ['', 'favicon.ico']
  - ['img/icons', 'android-icon-144x144.png']
  - ['img/icons', 'favicon-16x16.png']
  - ['img', 'logo.svg']

解释:dirname提取目录部分后,用replace('/', '', 1)移除开头的/,让根目录下的文件对应空字符串;basename负责提取纯文件名,最后将每一组目录和文件名封装为列表,再收集成二维数组。


内容的提问来源于stack exchange,提问作者Вадим Глушков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:26