如下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 ]]; docase $1 in-i|--input)input_patterns+=("$2")shift 2;;-o|--output)output_file="$2"shift 2;;-delResourceVersion)del_resource_version=trueshift;;*)echo "未知参数: $1"exit 1;;esac
done# 检查是否有输入文件模式
if [ ${#input_patterns[@]} -eq 0 ]; thenecho "请使用 -i 参数指定至少一个匹配文件模式。"exit 1
fi# 清空或创建输出文件
> "$output_file"# 遍历所有匹配的文件并进行合并
for pattern in "${input_patterns[@]}"; dofor file in $pattern; doif [ -f "$file" ]; thencat "$file" >> "$output_file"echo "---" >> "$output_file"elseecho "警告:未找到文件模式 '$file' 匹配的文件。"fidone
done# 删除最后一个多余的 ---
truncate -s -4 "$output_file"# 如果指定了 -delResourceVersion,则删除所有 resourceVersion 行
if [ "$del_resource_version" = true ]; thensed -i '/^\s*resourceVersion:\s*'"'"'[0-9]\+'"'"'/d' "$output_file"
fiecho "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)