You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建循环:用jq遍历JSON块筛选旧Zip包并处理

筛选并删除早于指定日期的ZIP文件(基于JQ解析JSON)

我来帮你一步步实现这个需求!首先咱们得从JSON数据里精准筛选出符合条件的ZIP包,再通过循环处理这些文件完成删除操作。

1. 用JQ筛选目标ZIP文件

首先,我们需要从你的JSON数据里挑出ZIP类型且修改时间早于指定日期的文件。JQ可以轻松完成这个筛选,还能提取我们需要的字段:

基础筛选(按日期匹配)

如果只需要按日期(忽略具体时间)筛选,用下面的命令:

jq -r '.hits[] | 
       select(.mimeType == "application/zip" and (.lastModified | split(" ") | .[0]) < "2020-06-25") | 
       .path' your_json_data.json

命令拆解:

  • .hits[]:遍历hits数组里的每一个数据块
  • select(...):筛选两个条件:
    • .mimeType == "application/zip":只保留ZIP格式的文件
    • (.lastModified | split(" ") | .[0]) < "2020-06-25":提取lastModified里的日期部分,和目标日期比较
  • .path:输出文件的完整路径(方便后续删除操作)

精确时间筛选(含时分秒)

如果需要精确到具体时间点(比如删除2020-06-25 00:00:00之前的文件),可以把时间转换成时间戳来比较:

jq -r '.hits[] | 
       select(.mimeType == "application/zip" and 
              (.lastModified | strptime("%Y-%m-%d %H:%M:%S") | mktime) < 
              ("2020-06-25 00:00:00" | strptime("%Y-%m-%d %H:%M:%S") | mktime)) | 
       .path' your_json_data.json

2. 循环处理筛选结果

接下来,我们把JQ的筛选结果传入bash循环,逐个处理这些文件。下面是完整的脚本示例:

#!/bin/bash

# 定义目标日期(可以按需修改)
TARGET_DATE="2020-06-25"
# 如果需要精确时间,改成 TARGET_DATETIME="2020-06-25 00:00:00"

# 读取JQ筛选结果,循环处理每个文件
jq -r '.hits[] | 
       select(.mimeType == "application/zip" and (.lastModified | split(" ") | .[0]) < "'"$TARGET_DATE"'") | 
       .path' your_json_data.json | while read -r file_path; do
    # 先打印提示(测试阶段可以先看输出,确认无误再执行删除)
    echo "即将删除文件:$file_path"
    # 取消下面的注释,执行实际删除操作
    # rm -f "$file_path"
done

提示:如果你的JSON数据是通过API请求获取的(比如curl),可以直接把JQ命令接在请求后面,不用保存到文件:

curl "your_api_endpoint_url" | jq -r '...' | while read -r file_path; do ...; done

额外说明

  • 测试阶段建议先保留echo命令,确认输出的文件路径都是你想要删除的,再启用rm命令
  • 如果环境中需要权限验证(比如AEM的包删除),可以把rm换成对应的API删除命令,比如调用AEM的删除接口

内容的提问来源于stack exchange,提问作者Alfador

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:17:59