簡體   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