jq json树遍历(npm节点_模块)

jq json树遍历(npm节点_模块),npm,node-modules,jq,Npm,Node Modules,Jq,问题涉及代码优化 我想定义一个json文件,它指定要复制哪些文件以及复制到哪里。也就是说,我想在npm类型的项目中应用它,将文件从节点_模块传输到目标目录,我从中包括文件(在web浏览器页面的模板上)。所以我写了一个json文件: { "public": [ { "bootstrap": { "js": [ "bootstrap.min.js" ], "css": [ "b

问题涉及代码优化

我想定义一个json文件,它指定要复制哪些文件以及复制到哪里。也就是说,我想在npm类型的项目中应用它,将文件从节点_模块传输到目标目录,我从中包括文件(在web浏览器页面的模板上)。所以我写了一个json文件:

{
  "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程序生成的输出中,排序是不同的,因为问题中的脚本使用
,按字母顺序对键进行排序