如下bash脚本实现功能 “将多个k8s的yaml 配置文件” 合并为一个 yaml,使用 --- 分割文件配置。

创建文件 merge_yaml.sh ,内容如下:

#!/bin/bash

# 默认参数
input_patterns=()  # 匹配的文件模式数组
output_file="combined.yaml"  # 输出文件名,默认为 combined.yaml
del_resource_version=false   # 是否删除 resourceVersion 行,默认不删除

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -i|--input)
            input_patterns+=("$2")
            shift 2
            ;;
        -o|--output)
            output_file="$2"
            shift 2
            ;;
        -delResourceVersion)
            del_resource_version=true
            shift
            ;;
        *)
            echo "未知参数: $1"
            exit 1
            ;;
    esac
done

# 检查是否有输入文件模式
if [ ${#input_patterns[@]} -eq 0 ]; then
    echo "请使用 -i 参数指定至少一个匹配文件模式。"
    exit 1
fi

# 清空或创建输出文件
> "$output_file"

# 遍历所有匹配的文件并进行合并
for pattern in "${input_patterns[@]}"; do
    for file in $pattern; do
        if [ -f "$file" ]; then
            cat "$file" >> "$output_file"
            echo "---" >> "$output_file"
        else
            echo "警告:未找到文件模式 '$file' 匹配的文件。"
        fi
    done
done

# 删除最后一个多余的 ---
truncate -s -4 "$output_file"

# 如果指定了 -delResourceVersion,则删除所有 resourceVersion 行
if [ "$del_resource_version" = true ]; then
    sed -i '/^\s*resourceVersion:\s*'"'"'[0-9]\+'"'"'/d' "$output_file"
fi

echo "YAML 文件已成功合并到 $output_file"

使用方法示例:

现在你可以更简洁地调用脚本:

1、合并所有 .yaml 文件到 output.yaml 并删除 resourceVersion 行

./merge_yaml.sh -i "*.yaml" -o "output.yaml" -delResourceVersion

2、合并特定前缀的 YAML 文件到 output.yaml

./merge_yaml.sh -i "res/file*.yaml" -o "output.yaml"

3、合并多个不同模式的文件到 output.yaml

./merge_yaml.sh -i "file1_*.yaml" -i "file2_*.yaml" -o "output.yaml"

注意文件使用双引号包括。


(END)