1
1
# -*- coding=utf-8
2
- #
3
- # ref to @shezhangjun
4
- # https://github.com/shezhangjun/TencentCOS/blob/master/Python_SDK/COS_Disaster_Recovery/DisasterRecovery.py
5
- #
2
+
6
3
from qcloud_cos import CosConfig
7
4
from qcloud_cos import CosS3Client
8
5
import sys
12
9
# logging.basicConfig(level=logging.INFO, stream=sys.stdout)
13
10
14
11
15
- def _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix ,
16
- dst_region , dst_secret_id , dst_secret_key , dst_bucket ):
12
+ def _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix ):
13
+
17
14
src_client = CosS3Client (CosConfig (Region = src_region , SecretId = src_secret_id , SecretKey = src_secret_key ))
18
- dst_client = CosS3Client (CosConfig (Region = dst_region , SecretId = dst_secret_id , SecretKey = dst_secret_key ))
19
15
20
16
key_marker = ''
21
17
versionId_marker = ''
@@ -35,8 +31,7 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
35
31
delete_marker_keys .append (version ['Key' ])
36
32
37
33
if len (delete_marker_keys ) == 0 :
38
- print ('no delete markers found, no data to recover' )
39
- return
34
+ print ('no delete markers found, no data to recover, continue listing' )
40
35
41
36
# 从 Version 取最新的版本号
42
37
if 'Version' in response :
@@ -46,8 +41,8 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
46
41
if key in delete_marker_keys and not key in recovered_keys :
47
42
print ('recover from key:{key}, versionId:{versionId}' .format (key = key , versionId = versionId ))
48
43
try :
49
- dst_client .copy (
50
- Bucket = dst_bucket ,
44
+ src_client .copy (
45
+ Bucket = src_bucket ,
51
46
Key = key ,
52
47
CopySource = {
53
48
'Bucket' : src_bucket ,
@@ -57,8 +52,8 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
57
52
}
58
53
)
59
54
recovered_keys .append (key )
60
- print ("success recover object: {src_bucket}/{ key}({versionId}) => {dst_bucket}/ {key}" .format (
61
- src_bucket = src_bucket , key = key , versionId = versionId , dst_bucket = dst_bucket ))
55
+ print ("success recover object: {key}(versionId= {versionId}) => {key}" .format (
56
+ src_bucket = src_bucket , key = key , versionId = versionId ))
62
57
except Exception as e :
63
58
print (e )
64
59
pass
@@ -72,22 +67,14 @@ def _recover_main(src_region, src_secret_id, src_secret_key, src_bucket, prefix,
72
67
73
68
if __name__ == '__main__' :
74
69
# 使用场景:
75
- # 根据源桶src_bucket的删除标记从历史版本里把文件恢复到dst_bucket
76
- # src_bucket和dst_bucket可以一致, 即原地恢复
70
+ # 根据源桶src_bucket的删除标记从历史版本里把文件恢复出来
77
71
78
72
# 源桶信息
79
73
src_region = 'ap-guangzhou' # 源地域
80
74
src_secret_id = '' # 源桶SecretID
81
75
src_secret_key = '' # 源桶SecretKey
82
76
src_bucket = 'bucket-1200000000' # 源桶名
83
77
84
- # 目标桶信息
85
- dst_region = 'ap-guangzhou' # 目标桶地域
86
- dst_secret_id = '' # 目标桶SecretID
87
- dst_secret_key = '' # 目标桶SecretKey
88
- dst_bucket = 'bucket-1250000000' # 目标桶名
89
-
90
78
prefix = '' # 设置要恢复的对象前缀
91
79
92
- _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix ,
93
- dst_region , dst_secret_id , dst_secret_key , dst_bucket )
80
+ _recover_main (src_region , src_secret_id , src_secret_key , src_bucket , prefix )
0 commit comments