То, что вы хотите сделать, не гарантированно работает.Например, у вас есть два файла YAML:
foo: bar
и:
%YAML 1.2
---
baz
Как видите, второй файл содержит директиву.Он также показывает, что ---
в YAML - это не разделитель, а маркер конца директив .Это необязательно, если у вас нет директив, как в первом документе.Если вы объедините оба документа так, как вы хотите, вы получите документ с двумя ---
, а %YAML 1.2
будет интерпретирован как контент, потому что это происходит после маркера конца директивы.
Так чтона самом деле вы хотите пометить конец каждого документа ...
, маркер конца документа .После этого маркера синтаксический анализатор сбрасывается в исходное состояние, что гарантирует, что второй документ анализируется точно так же, как если бы он был в отдельном файле.
Кроме того, добавление * не причинит никакого вреда1019 * к последнему документу, поскольку он не запускает другой документ неявно.Таким образом, ваша команда может выглядеть следующим образом (я полагаюсь на ваше утверждение, что вы знаете глубину, на которой лежат файлы, и, например, ожидайте глубину в 3 директории):
echo -n > finalDeplayment.yml
for f in */*/*/deployment.yml; do
cat $f >> finalDeployment.yml; echo "..." >> finalDeployment.yml
done