我正在使用带有boto3的版本化S3存储桶。如何检索给定密钥的所有版本(甚至所有密钥的所有版本)?我可以这样做:
for os in b.objects.filter(Prefix=pref):
print("os.key")
但是这只给了我每个键的最新版本。
非常感谢,
答案 0 :(得分:8)
import boto3
bucket = 'bucket name'
key = 'key'
s3 = boto3.resource('s3')
versions = s3.Bucket(bucket).object_versions.filter(Prefix=key)
for version in versions:
obj = version.get()
print(obj.get('VersionId'), obj.get('ContentLength'), obj.get('LastModified'))
由于我遇到同样的问题,我无法理解,但我发现了here
答案 1 :(得分:3)
boto3 s3客户端具有list_object_versions
方法。
resp = client.list_object_versions(Prefix=prefix, Bucket=bucket)
for obj in [*resp['Versions'], *resp.get('DeleteMarkers', [])]:
print(f"Key: {obj['Key']}")
print(f"VersionId: {obj['VersionId']}")
print(f"LastModified: {obj['LastModified']}")
print(f"IsLatest: {obj['IsLatest']}")
print(f"Size: {obj.get('Size', 0)/1e6}")
假设要删除除当前版本以外的所有版本,可以通过将IsLatest
以外的对象添加到to_delete
列表中,然后运行以下命令来实现:
for obj in to_delete:
print(client.delete_object(Bucket=bucket, Key=obj['Key'], VersionId=obj['VersionId']))