将文件列表转换为 json 地图

Converting a list of files to json map

我一直在努力弄清楚如何使用 jq 将文件列表映射到给定的 JSON 结构。我有以下文件列表:

/tmp/jboss/ejb-jar_3_2.xsd
/tmp/jboss/example.crt
/tmp/jboss/example.key
/tmp/jboss/incomingrunasidentityloginmodule.zip
/tmp/jboss/jboss-eap-7.0.0.zip
/tmp/jboss/jboss-eap-7.0.8-patch.zip
/tmp/jboss/keystore.jks
/tmp/jboss/logger-api.sh
/tmp/jboss/mgmt-api-example.txt
/tmp/jboss/wildfly-dist-10.1.0.Final.zip
/tmp/jboss/wildfly-dist-7.1.0.GA-redhat-8.jar

我想将其转换为以下 JSON 结构,其中 dirname 是目录结构中的最终路径。

[ 
  { dirname: "jboss", filename: "/tmp/jboss/ejb-jar_3_2.xsd" },
  { dirname: "jboss", filename: "/tmp/jboss/example.crt" },
...
...
]

我想我可以用来提取路径的正则表达式相当简单:.*/(.*)/ 或类似的东西。但是,我不知道如何构建 jq 过滤器。我想它应该是这样的:

cat /tmp/files.txt | jq --raw-input '. |  { dirname: .match(regex).capture[0], filename: .}'

与我得到的一样接近,但是有几个问题。 1) 我不知道如何为目录名使用正则表达式,以及 2) 这实际上并没有构建对象列表——它只是生成了多个对象。

有没有简单的 jq 过滤器可供我使用?

jq -nR '
  [inputs | capture(".*/(?<dirname>[^/]*)/[^/]+$") + { filname: .}]'