首页 > 解决方案 > 输出每个块的特定部分

问题描述

我有一个由 jq 解析的 json,但我需要遍历每个块并获取名称和 lastModified 然后存储它们,以便我可以删除比特定日期更早的 zip 文件。对于这个例子,假设 2020-06-25 是一个“旧包”所以我们有 da-editor-user-groups-1.7.0.zip 和 lastModified 2020-06-25 我需要通过 lastModified 过滤所有此类包带 jq 的属性

{
    "success": true,
    "results": 6,
    "total": 6,
    "more": false,
    "offset": 0,
    "hits": [
        {
            "path": "/etc/packages/com.change.aem.platform/change-editor-user-accounts-1.3.0.zip",
            "excerpt": "/etc/packages/com.change.aem.platform/change-editor-user-accounts-1.3.0.zip",
            "name": "change-editor-user-accounts-1.3.0.zip",
            "title": "change-editor-user-accounts-1.3.0.zip",
            "lastModified": "2020-06-25 17:50:12",
            "created": "2020-06-25 17:50:12",
            "size": "36 KB",
            "mimeType": "application/zip"
        },
        {
            "path": "/etc/packages/com.change.aem.platform/change-editor-user-accounts-1.3.0.zip/jcr:content/vlt:definition/thumbnail.png",
            "excerpt": "/etc/packages/com.change.aem.platform/change-editor-user-accounts-1.3.0.zip/jcr:content/vlt:definition/thumbnail.png",
            "name": "thumbnail.png",
            "title": "thumbnail.png",
            "lastModified": "2020-06-25 17:50:13",
            "created": "2020-06-25 17:50:13",
            "size": "2 KB",
            "mimeType": "image/png"
        },
        {
            "path": "/etc/packages/com.change.aem.platform/.snapshot/change-editor-user-accounts-1.3.0.zip",
            "excerpt": "/etc/packages/com.change.aem.platform/.snapshot/change-editor-user-accounts-1.3.0.zip",
            "name": "change-editor-user-accounts-1.3.0.zip",
            "title": "change-editor-user-accounts-1.3.0.zip",
            "lastModified": "2020-06-25 17:50:13",
            "created": "2020-06-25 17:50:13",
            "size": "7 KB",
            "mimeType": "application/zip"
        },
        {
            "path": "/etc/packages/com.change.aem.platform/.snapshot/change-editor-user-groups-1.7.0.zip",
            "excerpt": "/etc/packages/com.change.aem.platform/.snapshot/change-editor-user-groups-1.7.0.zip",
            "name": "change-editor-user-groups-1.7.0.zip",
            "title": "change-editor-user-groups-1.7.0.zip",
            "lastModified": "2020-06-25 17:50:13",
            "created": "2020-06-25 17:50:13",
            "size": "12 KB",
            "mimeType": "application/zip"
        },
        {
            "path": "/etc/packages/com.change.aem.platform/change-editor-user-groups-1.7.0.zip",
            "excerpt": "/etc/packages/com.change.aem.platform/change-editor-user-groups-1.7.0.zip",
            "name": "change-editor-user-groups-1.7.0.zip",
            "title": "change-editor-user-groups-1.7.0.zip",
            "lastModified": "2020-06-25 17:50:13",
            "created": "2020-06-25 17:50:13",
            "size": "31 KB",
            "mimeType": "application/zip"
        },
        {
            "path": "/etc/packages/com.change.aem.platform/change-editor-user-groups-1.7.0.zip/jcr:content/vlt:definition/thumbnail.png",
            "excerpt": "/etc/packages/com.change.aem.platform/change-editor-user-groups-1.7.0.zip/jcr:content/vlt:definition/thumbnail.png",
            "name": "thumbnail.png",
            "title": "thumbnail.png",
            "lastModified": "2020-06-25 17:50:13",
            "created": "2020-06-25 17:50:13",
            "size": "2 KB",
            "mimeType": "image/png"
        }
]
}

问题是如何创建一个首先检查给定块内容的循环

标签: jsonlinuxcurljq

解决方案


jq 无法执行“rm”命令,但假设您在 bash 或类似 bash 的环境中运行 jq,您可以按照以下建议进行操作:

jq '.hits[] | select( .lastModified[:10] <= "2020-06-25") | .name' | 
  while read -r f ; do
    echo rm "$f"         # `echo` for testing
  done   

这当然假设 .lastModified 字段以日期的 YYYY-MM-DD 形式开始。如果其中任何一个假设不正确,您可以相应地调整上述内容。


推荐阅读