如下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)