gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:06 25 4
gpt4 key购买 nike

我需要将多个 k8s 部署 yaml 文件合并到一个部署脚本中,并在这样做时创建一个特定的分隔符 ---每个文件之间。我知道文件将存在的具体深度以及文件名,但是我不知道在给定时间会有多少,所以我使用了 find下面声明

  1. 递归搜索yaml文件
  2. 连接每个
  3. 通过管道传输 tail命令作为分隔符

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

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

enter image description here

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

是否可以在 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

关于linux - 使用分隔符连接多个 yaml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56048152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com