所以。我是个白痴。周五,我以编程方式覆盖了存储桶中的大约 14,000 个文件,直到今天才意识到。幸运的是,这些文件是有版本的。不幸的是,我找不到一个很好的清晰示例来说明如何编写脚本来浏览文件,然后恢复第二个最新版本。我一直在浏览 Boto 文档,并且了解如何删除版本,但不能恢复。如果有人能给我一些显示如何恢复特定版本的代码,我可以轻松使用 php 或 python。
这是需要您小心的事情。我不想尝试为您提供完整的解决方案,因为我没有时间彻底测试它,也不想做出任何承诺。
但是,也许这会有所帮助。
首先,我们假设我们想要查找 boto 中特定存储桶中特定密钥的所有版本。我们可以这样做:
import boto
conn = boto.connect_s3()
bucket_name = 'mybucket'
key_name = 'mykey'
bucket = conn.lookup(bucket_name)
for k in bucket.list_versions(key_name):
print(k.name, k.version_id, k.last_modified)
这应该打印出类似这样的内容:
mykey TyvPH4UUD4zRnGhmmLH6HGHOcOnsJgQG 2013-03-03T19:10:39.000Z
mykey IxNYlmoyDsOSspR6SwuGVNM7Nr83ZTSI 2013-03-03T15:11:06.000Z
mykey XVI9_yxQYU6B2KXQv0VLj7luYOGwWCoh 2013-03-03T15:10:55.000Z
mykey qh0zjxWjRC8WvXQc_RmvVdCJ.S3gF2ui 2013-03-03T15:07:46.000Z
假设我们要“恢复”最旧的文件。为此,我们实际上将对象的所需版本复制回其自身。在 boto 中,看起来像这样:
bucket.copy_key(new_key_name=key_name, src_bucket_name=bucket_name, src_key_name=key_name, src_version_id='qh0zjxWjRC8WvXQc_RmvVdCJ.S3gF2ui')
这会将指定版本的密钥复制回同一存储桶中的自身。
我认为在释放脚本之前,您必须对此进行一些探索并进行大量测试。例如,您可以尝试将所需版本的对象复制到另一个存储桶中,并在复制到所需存储桶之前查看是否获得所需的内容。
希望这有帮助。
S3 时间点恢复 是 Amazon S3 的时间点恢复工具。