因此。我是个白痴。我星期五以编程方式覆盖了大约14,000个文件,直到今天才意识到这一点。幸运的是,文件是版本化的。不幸的是,我找不到一个很好的清晰示例,说明如何编写脚本来浏览文件,然后恢复第二个最新版本。我一直在浏览Boto文档,我看到了如何删除版本,但没有恢复。如果有人能给我一些显示如何恢复特定版本的代码,我很乐意使用php或python。
答案 0 :(得分:4)
这需要您的注意。我不想尝试为您提供完整的解决方案,因为我没有时间对其进行彻底的测试,我也不想做出任何承诺。
然而,也许这会有所帮助。
首先,我们假设我们想要在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
假设我们要“恢复”最旧的文件。为此,我们实际上将所需的对象版本复制回自身。在博托,这将是这样的:
bucket.copy_key(new_key_name=key_name, src_bucket_name=bucket_name, src_key_name=key_name, src_version_id='qh0zjxWjRC8WvXQc_RmvVdCJ.S3gF2ui')
这会将指定版本的密钥复制回同一个存储桶中。
我认为你必须先探索一下,然后在松开脚本之前做很多测试。例如,您可以尝试将所需的对象版本复制到另一个存储桶中,看看在复制到所需存储桶之前是否得到了所需的数据。
希望这有帮助。