使用';du';输出JSON

使用';du';输出JSON,json,linux,bash,awk,sed,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 2

我想写一行代码,它将获得以下结果:

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应用程序中使用它

sed '1 i\
{"httpdocs": [
s/\([^[:space:]]*\)([[:space:]]*\([^[:space:]]*\)[[:space:]]*\([^[:space:]]*\)/  {\
    "size" : "\1",\
    "modified": "\2",\
    "path": "\3"}/
$ a\^J]}' YourFile
又快又脏(posix版本so
——GNU上的posix

使用组(
\(…\)
\1
)将3个参数(
s/../../../
)放入“模板”中。 在第一行包括页眉(
i\…
)并在最后一行附加页脚(
a\…
)。
[:space:][/code>可能是
[:blank:][/code>

嘿,这主要起到了作用。我不得不稍微调整它,以考虑选项卡和包含空格的日期格式。下面是最终结果:
s/\([^\t]*\\([^\t]*\([^]*\s[^\t]*\]*\t\([^\n]*\)/{
…我不得不在每行末尾添加一个逗号,以说明JSON中的逗号,即“大小”:“\1”,现在唯一缺少的是最后一个条目在右括号后有一个逗号。我不知道如何去掉它。尽管它总是以
“total”结尾,
那么也许我可以在之后再做一次替换?这似乎有点可笑。无论如何,非常感谢你的回答。这真的很有帮助。我调整了标签的帖子,但不理解“最后一个条目有逗号”。你的示例没有显示它(也没有显示“总计…”)。