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

如何查询Google Nearline/Coldline存储中待删除文件的时长?

嘿,这个问题我刚好处理过,用gsutil有几个实用的方法能帮你精准查询文件的存储时长,避免误删未满30/90天的文件产生额外费用:

方法1:用gsutil ls快速筛选未满指定天数的文件

gsutil ls -l可以列出文件的详细信息,包括创建时间,配合awk就能直接筛选出不符合删除条件的文件:

针对Nearline(未满30天):

gsutil ls -l gs://your-nearline-bucket/** | awk -v cutoff=$(date -u -d "-30 days" +%Y-%m-%d) '{if ($1 ~ /[0-9]+/ && $2 >= cutoff) print $NF}'

针对Coldline(未满90天):

gsutil ls -l gs://your-coldline-bucket/** | awk -v cutoff=$(date -u -d "-90 days" +%Y-%m-%d) '{if ($1 ~ /[0-9]+/ && $2 >= cutoff) print $NF}'

这里用date -u确保和gsutil返回的UTC时间对齐,避免时区差导致计算错误。命令会直接输出所有存储时长不足30/90天的文件路径。

方法2:用gsutil stat查看单个文件的精确存储时长

如果想单独确认某个文件的存储天数,gsutil stat会给出最详细的时间信息:

gsutil stat gs://your-bucket-name/path/to/target-file

输出里的Creation time字段就是文件上传到存储的时间,比如:Creation time: 2024-03-15T08:30:00Z。你可以手动和当前UTC时间对比,或者写个简单的bash脚本批量计算:

#!/bin/bash
# 配置你的桶地址和对应存储类的天数限制
BUCKET="gs://your-bucket-name"
MIN_DAYS=30  # Nearline填30,Coldline填90

# 计算UTC时间下的截止时间戳
cutoff_timestamp=$(date -u -d "-$MIN_DAYS days" +%s)

# 遍历桶内所有文件
gsutil -m ls $BUCKET/** | while read file; do
    # 提取文件的创建时间并转成时间戳
    creation_time=$(gsutil stat "$file" | grep "Creation time" | awk '{print $3, $4}')
    creation_timestamp=$(date -u -d "$creation_time" +%s)
    
    # 计算已存储天数
    stored_days=$(( ($(date -u +%s) - $creation_timestamp) / 86400 ))
    
    if [ $stored_days -lt $MIN_DAYS ]; then
        echo "⚠️ $file 已存储 $stored_days 天,未满 $MIN_DAYS 天,删除会产生额外费用"
    fi
done

这个脚本会批量检查所有文件,标记出那些删除会触发额外费用的文件,-m参数开启并行处理,能大幅提升大桶的处理速度。

小提示
  • 先确保你的gsutil是最新版本:gsutil update,避免旧版本参数不兼容
  • 如果桶里有大量文件,建议按目录拆分查询,避免单次命令耗时过长
  • 测试时可以先加head -10限制输出数量,确认命令逻辑正确后再批量执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:06:03