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

如何将S3同存储桶内早于15天的文件移动到其他文件夹,求命令或Python脚本

你之前尝试的命令无法实现需求,原生aws s3 mv的--exclude/--include参数仅支持按文件名模式匹配,不支持按修改时间这类对象属性筛选。你可以通过以下两种方案实现需求:

方案一:使用AWS CLI实现

通过s3api list-objects-v2按修改时间筛选文件后,再逐个执行移动操作,Linux/macOS下可直接执行以下命令:

# 计算15天前的UTC时间戳
CUTOFF=$(date -u -d "-15 days" +%s)

# 筛选符合条件的文件并移动
aws s3api list-objects-v2 --bucket BUCKETNAME --prefix "myfolder/" \
--query "Contents[?LastModified < \`$CUTOFF\`].Key" --output text | tr '\t' '\n' | while read KEY; do
  if [ -n "$KEY" ]; then
    # 替换路径前缀得到目标路径
    TARGET_KEY=${KEY/#myfolder\//myotherfolder/}
    aws s3 mv "s3://BUCKETNAME/$KEY" "s3://BUCKETNAME/$TARGET_KEY"
  fi
done

注意事项:

  • 替换命令中的BUCKETNAME、源前缀myfolder/、目标前缀myotherfolder/为你实际的存储桶和路径值
  • 首次测试可先将aws s3 mv替换为echo aws s3 mv,确认要移动的文件列表无误后再执行实际移动操作

方案二:使用Python脚本实现

依赖boto3库,需先执行pip install boto3安装,脚本示例如下:

import boto3
from datetime import datetime, timedelta, timezone

# 自定义配置参数
BUCKET_NAME = "替换为你的存储桶名称"
SOURCE_PREFIX = "myfolder/"
TARGET_PREFIX = "myotherfolder/"
# 排除最近N天修改的文件
EXCLUDE_DAYS = 15

# 初始化S3资源,默认读取aws configure配置的凭证
s3 = boto3.resource('s3')
bucket = s3.Bucket(BUCKET_NAME)
# 计算时间阈值:当前UTC时间减去15天
cutoff_time = datetime.now(timezone.utc) - timedelta(days=EXCLUDE_DAYS)

for obj in bucket.objects.filter(Prefix=SOURCE_PREFIX):
    # 跳过路径占位的空文件夹对象
    if obj.key.endswith('/'):
        continue
    # 仅移动修改时间早于阈值的文件
    if obj.last_modified < cutoff_time:
        target_key = obj.key.replace(SOURCE_PREFIX, TARGET_PREFIX, 1)
        # S3移动操作等价于复制到目标路径后删除源文件
        s3.Object(BUCKET_NAME, target_key).copy_from(CopySource=f"{BUCKET_NAME}/{obj.key}")
        obj.delete()
        print(f"移动完成:{obj.key} → {target_key}")

注意事项:

  • 提前通过aws configure配置好AWS访问凭证,不要在脚本中硬编码密钥信息
  • 首次测试可注释掉copy_from和delete两行代码,仅打印待移动的文件列表,确认无误后再执行实际操作

内容的提问来源于stack exchange,提问作者Some Java Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:24:03