使用bash动态创建和更新json

使用bash动态创建和更新json,json,bash,Json,Bash,在我假设的文件夹/hd/log/中,我有2打文件夹,每个文件夹都有以下格式的日志文件foldername.2017.07.09.log。我有一个crontab,每天晚上gzip最后一个日志文件,因此每天都有一个新的日志文件和新的日志名 我正在尝试创建一个动态json文件,其输出如下所示: [ { "Foldername": "foldername", "lastmodifiedfile": "/hd/log/foldername/foldername.2

在我假设的文件夹
/hd/log/
中,我有2打文件夹,每个文件夹都有以下格式的日志文件
foldername.2017.07.09.log
。我有一个crontab,每天晚上gzip最后一个日志文件,因此每天都有一个新的日志文件和新的日志名

我正在尝试创建一个动态json文件,其输出如下所示:

[
    {
        "Foldername": "foldername", 
        "lastmodifiedfile": "/hd/log/foldername/foldername.2017.07.09.log"
    }, 
    {
        "Foldername": "foldername2", 
        "lastmodifiedfile": "/hd/log/foldername2/foldername2.2017.07.09.log"
    }
]
bash脚本应该能够为每个子文件夹名称动态创建数组(以防添加更多文件夹或更改名称),并且还可以直接链接到上次修改的文件

我已经编写了php程序来解析json文件,但是没有一种明智的方法来动态地修改这个json文件

感谢您的帮助或指点

printf "%s" "["
for var in $(find /hd/log -type d)    
do
   path=$("ls -1t $var" | head -1)
   echo $var"/"$path | awk -F\/ '{ printf "%s","\n\t{\n\t\t\"Foldername\":\""$(NF-1)"\",\n\t\tlastmodifiedfile\":\""$0"\"\n\t},"}'
done
printf "%s" "]"

在这里,我们在循环中找到/hd/log中的所有目录,依次获取每个目录,然后使用ls-1t | head-1获取目录中最后修改的文件。然后通过awk解析路径和文件以获得所需的输出。我们首先使用-F标志将awk的分隔符设置为/。然后,我们根据需要打印json语法,使用目录(NF-1-数字字段-1)的最后一个但只有一个/分隔符的数据段和最后修改的文件($0)的完整行。

到目前为止您尝试了什么?向我们展示您的努力。强烈建议您使用
jq
而不是bash来操作json对象。它几乎奏效了。我唯一想要但没有列出该文件夹上次修改的日志文件,它列出了该文件夹中的所有文件。我对bash不太熟悉,所以不确定从何处着手解决这个问题。好的,我已经修改了解决方案。我想这可能更符合你现在的要求。