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

Python实现带缩进的多YAML文件合并(指定目录场景)

实现YAML文件按指定格式合并的解决方案

你可以用一个轻量的Bash脚本来搞定这个需求——它会帮你把每个目标文件的路径作为YAML的顶级键,再把文件内容缩进后作为对应的值,完全匹配你想要的输出格式。

方法一:手动指定文件列表(精准控制)

如果你明确知道要合并的文件,直接用这个脚本最稳妥:

#!/bin/bash

# 把需要合并的文件路径都列在这里,按你需要的顺序排列
target_files=(
    "group_vars/all.template"
    "host_vars/host.template"
    "vars/CASSANDRA"
    "vars/CQLSH"
    "vars/CSYNC2"
    "vars/DSE_OPSCENTER"
    "vars/DSE_OPSCENTER_AGENT"
    "vars/logging.template"
    "vars/packages_vars.template"
    "vars/UDM"
    "vars/user_pub_keys"
)

# 生成合并后的YAML文件
for file in "${target_files[@]}"; do
    # 输出文件路径作为YAML键
    echo "$file:"
    # 给文件每一行加2个空格缩进,保证YAML结构合法
    sed 's/^/  /' "$file"
    # 每个文件之间加空行,让结果更易读
    echo
done > merged_vars.yaml

脚本说明:

  1. 先把所有要处理的文件路径放进target_files数组里,顺序可以自己调整
  2. 循环遍历每个文件:
    • 先输出文件路径:作为YAML的键
    • 用sed给文件的每一行前面加两个空格,让内容成为键的子节点,符合YAML语法
    • 每个文件后加空行分隔,提升可读性
  3. 最终结果会保存到merged_vars.yaml文件中

方法二:自动查找文件(适合文件数量多的情况)

如果后续文件可能新增或变动,不想手动维护列表,可以用find命令自动匹配目标文件:

#!/bin/bash

# 自动查找指定目录下的所有文件(可根据需要调整路径规则)
target_files=$(find . -type f \( -path "./group_vars/*" -o -path "./host_vars/*" -o -path "./vars/*" \) | sort)

# 生成合并后的YAML文件
for file in $target_files; do
    echo "$file:"
    sed 's/^/  /' "$file"
    echo
done > merged_vars.yaml

注意事项:

  • 确保所有源文件都是合法的YAML格式,否则合并后的文件可能出现语法错误
  • 如果源文件开头有YAML文档分隔符---,可以在sed命令前加sed '1d'去掉第一行(比如sed '1d' "$file" | sed 's/^/ /')
  • YAML标准用两个空格缩进,如果你习惯四个空格,把sed里的 改成 就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:11:31