繁体   English   中英

使用分隔符连接多个yaml文件

[英]Concatenate multiple yaml files with seperator

我需要多Concat的部署K8S YAML文件合并成一个部署脚本,并在此过程中创建一个特定的分离---每个文件之间。 我知道文件的具体深度以及文件名,但是我不知道在给定的时间会有多少,所以我使用了下面的find语句来

  1. 递归搜索yaml文件
  2. 每个都结束
  3. 作为分离器用tail命令管道

find . -type f -name 'deployment.yml' -exec cat {} + | tail -n +1 * > finalDeployment.yml

但是,这会通过插入==> <==分隔符来创建损坏的yaml语法:

在此输入图像描述

我可以简单地让另一个任务使用上面的前缀/后缀标记来运行查找/替换,但是我想在上面的语句中更简洁一些。

是否可以在cat命令中管道特定字符/字符集中的分隔符,或者是否有其他方法可以实现此目的?

你想做的事情不能保证工作。 例如,您有以下两个YAML文件:

foo: bar

和:

%YAML 1.2
---
baz

如您所见,第二个文件包含一个指令。 它还表明---在YAML中不是分隔符,而是指令结束标记 如果您没有第一个文档中的任何指令,则它是可选的。 如果以您希望的方式连接两个文档,您将获得一个包含两个文档的文档--- %YAML 1.2将被解释为内容,因为它发生在指令结束标记之后。

所以你真正想做的是用文件结束标记 ...标记每个文档的结尾 在该标记之后,解析器被重置为其初始状态,这保证了第二个文档的解析方式与它在单独文件中时的解析完全相同。

此外,通过向最后一个文档添加...不会造成任何伤害,因为它不会隐式启动另一个文档。 所以你的命令看起来像这样(我依赖你的声明,你知道文件在这里的深度,例如,期望3个目录的深度):

echo -n > finalDeplayment.yml
for f in */*/*/deployment.yml; do
  cat $f >> finalDeployment.yml; echo "..." >> finalDeployment.yml
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM