将文件列表转换为 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: .}]'
我一直在努力弄清楚如何使用 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: .}]'