入れ子になった (yaml など) ディレクトリ構造でフルパスを作成する

入れ子になった (yaml など) ディレクトリ構造でフルパスを作成する

(追加の実装のために) yamlディレクトリ構造をフルパスに変換するためにshell / bashにスクリプトを書いてみましたmkdir -p。 Yamlは人が編集できるので、私が選んだものです。構造例は次のとおりです。

- Downloads
    - Music
    - Movies
- University
    - First year
        - English
        - Maths
    - Second year

realpath .したがって、最初のレベルを現在のディレクトリ(たとえば)に置き換え、2番目のレベルを/home/maeda/Downloads親ディレクトリのフルパス(たとえば)に置き換えたいと思います。/home/maeda/Downloads/Music

だから私は次のような結果を得たいと思います。

/home/maeda/Downloads
/home/maeda/Downloads/Music
/home/maeda/Downloads/Movies
/home/maeda/University
/home/maeda/University/First year
/home/maeda/University/First year/English
/home/maeda/University/First year/Maths
/home/maeda/University/Second year

達成する方法?

ベストアンサー1

YAMLファイルが有効であるとします。

Downloads:
    Music:
    Movies:
University:
    First year:
        English:
        Maths:
    Second year:

使用できる

yq -r --arg prefix "$(realpath .)" 'paths | [ $prefix, .[] ] | join("/")' file.yaml

yqそれはどこから出たhttps://kislyuk.github.io/yq/

これは、jq文書から「パス」を取得するために式を使用します。このコンテキストでは、「パス」は文書自体の特定の項目を表しているため、配列パスはFirst year配列[ 'University', 'First year' ](JSON表記を使用して作成されます)です。

/これらのパスの配列は区切り文字を使用して接続できますjoin("/")

realpath .また、intoの出力をyq内部変数の値として渡します$prefix。この値は、に渡される前に各パス配列の前に追加されますjoin("/")。つまり、コマンドによって出力されるパス名の前に追加されますyq

おすすめ記事