从嵌套(例如 yaml)目录结构生成完整路径

从嵌套(例如 yaml)目录结构生成完整路径

我尝试在 shell/bash 中编写脚本,将 yaml 目录结构转换为完整路径(以进一步mkdir -p实现)。 Yaml 是我的选择,因为它具有人类可编辑性。结构示例为:

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

所以我想用当前目录(realpath .)替换第一级,例如,,/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

从哪里来yqhttps://kislyuk.github.io/yq/

这使用jq表达式从文档中获取“路径”。此上下文中的“路径”是文档本身中任何特定条目的表示,因此数组的路径First year就是数组[ 'University', 'First year' ](使用 JSON 表示法编写)。

这些路径数组可以使用 来连接/作为分隔符join("/")

realpath .我还将into的输出yq作为内部变量的值传递$prefix。在将路径数组传递给 之前,该值会添加到每个路径数组的前面join("/"),这意味着它将被添加到命令输出的路径名的前面yq

相关内容