我的目录中有几个 .json
文件。如果我这样做:
find . -name '*.json' -exec echo "{\"filename\": \"{}\", \"content\": `cat {}` }," \;
我得到:
{"filename": "./a.json", "content": },
{"filename": "./b.json", "content": },
但是,如果我这样做:
find . -name '*.json' -exec echo "{\"filename\": \"{}\", \"content\": cat {} }," \;
我得到:
{"filename": "./a.json", "content": cat ./a.json },
{"filename": "./b.json", "content": cat ./b.json },
那么如何使 a.json
和 b.json
内容被正确 cat
编辑?
顺便说一句,如果我这样做:
find . -name '*.json' -exec cat {} \;
在控制台中正确打印了 json 文件,因此我知道文件内容是有效的。
最佳答案
使用不带find
的bash
你可以在下面做。您可以使用 nullglob
和 globstar
进行递归 JSON 文件名遍历
shopt -s nullglob globstar
默认情况下,jq
提供了一个函数input_filename
,它打印当前正在处理的文件名。文档说,只要语言环境是 UTF-8
jq '{ filename: input_filename, content: . }' **/*.json
要在对象条目之间使用逗号,请将 -n
标志与 inputs
一起使用,并将整个结果放入数组 [..]
jq -n '[inputs | { filename: input_filename, content: . }]' **/*.json
对于同一行的紧凑输出,使用 -c
标志作为 jq -c '..'
关于bash - 使用 JSON 文件的名称及其在 bash 中的内容创建一个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62156585/