jq json树遍历(npm节点_模块)
问题涉及代码优化 我想定义一个json文件,它指定要复制哪些文件以及复制到哪里。也就是说,我想在npm类型的项目中应用它,将文件从节点_模块传输到目标目录,我从中包括文件(在web浏览器页面的模板上)。所以我写了一个json文件:jq json树遍历(npm节点_模块),npm,node-modules,jq,Npm,Node Modules,Jq,问题涉及代码优化 我想定义一个json文件,它指定要复制哪些文件以及复制到哪里。也就是说,我想在npm类型的项目中应用它,将文件从节点_模块传输到目标目录,我从中包括文件(在web浏览器页面的模板上)。所以我写了一个json文件: { "public": [ { "bootstrap": { "js": [ "bootstrap.min.js" ], "css": [ "b
{
"public": [
{
"bootstrap": {
"js": [
"bootstrap.min.js"
],
"css": [
"bootstrap.min.css"
]
}
},
{
"jquery": {
"js": [
"jquery.min.js"
]
}
}
]
}
第一级定义目标目录(“public”)的名称,该目录将包含第二级指定的包。第三级定义“public”(“js”或“css”)中目标文件夹的名称,其中包含要查找和复制的文件列表
遍历json文件的代码如下所示:
#/usr/bin/env bash
cfg='push2public.json'
P=$(cat“$cfg”| jq键[0]-r)
n=$(类别“$cfg”| jq.$P |长度”)
对于((i=0;i)在这个回答中,我将重点关注一个要点——构建
只调用一次jq的shell命令。jq没有“系统”命令
为了执行这些命令,此处给出的jq程序可能需要修改,具体取决于安全要求
为了让事情顺利进行,请注意问题中给出的脚本生成(并执行)
以下shell命令:
find . -path ./node_modules/bootstrap/* -name bootstrap.min.css | xargs -I{} cp -fa {} public/css/
find . -path ./node_modules/bootstrap/* -name bootstrap.min.js | xargs -I{} cp -fa {} public/js/
find . -path ./node_modules/jquery/* -name jquery.min.js | xargs -I{} cp -fa {} public/js/
使用以下jq程序,只需调用一次jq即可生成这些命令:
def construct:
(.value | to_entries[] | "-name \(.value[0]) | xargs -I{} cp -fs {} public/\(.key)/") as $s
| "find . -path ./node_modules/\(.key)/* " + $s ;
.[][]
| to_entries[]
| construct
请注意,在这个jq程序生成的输出中,排序是不同的,因为问题中的脚本使用键
,按字母顺序对键进行排序