如何查询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
相关产品推荐
相关产品推荐

