使用' du'监控CentOS中的磁盘使用情况输出JSON

时间:2014-08-25 07:32:06

标签: json linux bash awk sed

我想编写一行代码来获取结果:

du -sh -c --time /00-httpdocs/*

并以JSON格式输出。目标是为站点中的每个项目文件获取三条信息:目录路径,上次修改日期以及人类可读格式的磁盘空间使用情况。此命令将以制表符分隔的格式输出该数据,并在终端的新行中​​输入每个条目:

4.6G    2014-08-22 12:26    /00-httpdocs/00
1.1G    2014-08-22 13:32    /00-httpdocs/01
711M    2014-02-14 23:39    /00-httpdocs/02

目标是将其导出到JSON文件,因此需要格式化为:

{"httpdocs": [
  {
    "size": "4.6G",
    "modified": "2014-08-22 12:26",
    "path": "/00-httpdocs/00-PREVIEW"}
  {
    "size": "1.1G",
    "modified": "2014-08-22 13:32",
    "path": "/00-httpdocs/8oclock"}
  {
    "size": "711M",
    "modified": "2014-02-14 23:39",
    "path": "/00-httpdocs/8oclock.new"}
]}

(我知道JSON不太合适,我只是把它作为一个例子。请向我们中间的迂腐道歉。)

我需要将大小作为整数返回(因此可能会删除' -sh'并稍后处理转换?)。

我尝试过使用awk和sed,但我是一个新手并且不能正确地进行格式化。

我已经做到了这一点:

du -sh -c --time /00-httpdocs/* | awk ' BEGIN {print "\"httpdocs:\": [";} {print "{"$0"},\n";} END {print "]";}'

目标是每天触发两次,以便我们可以获取数据并在JavaScript应用程序中使用它。

1 个答案:

答案 0 :(得分:1)

sed '1 i\
{"httpdocs": [
s/\([^[:space:]]*\)([[:space:]]*\([^[:space:]]*\)[[:space:]]*\([^[:space:]]*\)/  {\
    "size" : "\1",\
    "modified": "\2",\
    "path": "\3"}/
$ a\^J]}' YourFile

快速而肮脏(在GNU sed上使用posix版本--posix)。

使用3参数并将它们(s/../../)放入使用组(\( ...\)\1)的“模板”中。  在第一行(i \...)包含标题,并在最后添加页脚ant(a \...)。   [:space:]可能是[:blank:]