通过boto3同步两个桶

新手上路,请多包涵

有什么方法可以使用 boto3 在两个不同的存储桶(源和目标)中循环存储桶内容,如果它在源中找到与目标不匹配的任何密钥,它会将其上传到目标存储桶。请注意我不想使用 aws s3 sync。我目前正在使用以下代码来完成这项工作:

 import boto3

s3 = boto3.resource('s3')
src = s3.Bucket('sourcenabcap')
dst = s3.Bucket('destinationnabcap')
objs = list(dst.objects.all())
for k in src.objects.all():
 if (k.key !=objs[0].key):
  # copy the k.key to target

原文由 milad ahmadi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 620
2 个回答

如果您只想通过键进行比较(忽略对象内的差异),您可以使用类似的东西:

 s3 = boto3.resource('s3')
source_bucket = s3.Bucket('source')
destination_bucket = s3.Bucket('destination')
destination_keys = [object.key for object in destination_bucket.objects.all()]
for object in source_bucket.objects.all():
  if (object.key not in destination_keys):
    # copy object.key to destination

原文由 John Rotenstein 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您决定不使用 boto3。 sync 命令对于 boto3 仍然不可用,所以你可以直接使用它

# python 3

import os

sync_command = f"aws s3 sync s3://source-bucket/ s3://destination-bucket/"
os.system(sync_command)

原文由 anyavacy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题