使用bash动态创建和更新json

时间:2017-07-08 22:22:13

标签: json bash

在我的假设文件夹/hd/log/中,我有2个文件夹,每个文件夹都有这种格式的日志文件foldername.2017.07.09.log。我有一个crontab,每晚都会压缩最后一个日志文件,因此每天都会有一个带有新日志名称的新日志文件。

我正在尝试创建一个动态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文件。

感谢任何帮助或指示。

1 个答案:

答案 0 :(得分:0)

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的分隔符设置为/。然后我们根据需要使用目录的最后一个/分隔数据(NF -1 - 数字字段-1)和最后修改文件的完整行($ 0)打印json语法。