我尝试在 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
从哪里来yq
https://kislyuk.github.io/yq/
这使用jq
表达式从文档中获取“路径”。此上下文中的“路径”是文档本身中任何特定条目的表示,因此数组的路径First year
就是数组[ 'University', 'First year' ]
(使用 JSON 表示法编写)。
这些路径数组可以使用 来连接/
作为分隔符join("/")
。
realpath .
我还将into的输出yq
作为内部变量的值传递$prefix
。在将路径数组传递给 之前,该值会添加到每个路径数组的前面join("/")
,这意味着它将被添加到命令输出的路径名的前面yq
。