json 使用jq向列表的每个元素添加字符串

new9mtju  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(125)

我想把一个父目录的所有目录名都写在一个列表中,我使用tree命令和jq来实现这个。
这就是我目前掌握的情况:

directories_found=$(tree -J -d -L 1 | jq -c '.[0].contents | map(.name)').map(.name)

树命令在管道之前返回:

directories_found=[{"type":"directory","name": ".","contents":[ {"type":"directory","name":"AppBackend","contents":[ ]}, {"type":"directory","name":"list-folder-action","contents":[ ]} ]}, {"type":"report","directories":2} ]

然后,在应用jq之后,我看到的输出是:

["AppBackend","list-folder-action"]

看起来很棒。但是我想编辑这些值,同时保持列表结构。
我的目标是在每个元素之前添加一段文本,如下所示:

["example/AppBackend","example/list-folder-action"]

我才刚开始用jq,怎么会这样呢?

epggiuax

epggiuax1#

作为对@pmf答案的补充,也许值得一提的是,你可以在命令行中指定前缀,而且,如果你想保持树形结构,你可以这样运行jq:

jq -c --arg prefix example/ '.[0].contents |= map($prefix + .name)'

相关问题