bash - 使用 JSON 文件的名称及其在 bash 中的内容创建一个 JSON 对象

标签 bash find echo jq cat

我的目录中有几个 .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.jsonb.json 内容被正确 cat 编辑?

顺便说一句,如果我这样做:

find . -name '*.json' -exec cat {} \;

在控制台中正确打印了 json 文件,因此我知道文件内容是有效的。

最佳答案

使用不带findbash 你可以在下面做。您可以使用 nullglobglobstar 进行递归 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/

相关文章:

windows - 在 Windows 上更改 Git 提示符

bash - 在bash中右对齐/填充数字

svn - 如何在Subversion服务器中搜索文件?

php - 回显随机数组

windows - 缺少从 Windows 命令行或批处理中将引号“符号放入文件中

linux - 如何在目录和子目录的文件中递归搜索模式并生成sha1sum?

linux - 显示最常用时区的当前时间(UTC、EDT、CEST...)

python - 查找元组中第二个元素的最大值 - Python

Unix 删除指定目录下的所有文件夹

java - 在 Linux 中使用 echo 使用 Runtime.exec 创建文件?