* s3cmd: Patch from Basil Shubin <basil.shubin@gmail.com>
adding support for "s3cmd du" command.
git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@117 830e0280-6d2a-0410-9c65-932aecc39d9d
... | ... |
@@ -1,5 +1,7 @@ |
1 | 1 |
2007-05-26 Michal Ludvig <michal@logix.cz> |
2 | 2 |
|
3 |
+ * s3cmd: Patch from Basil Shubin <basil.shubin@gmail.com> |
|
4 |
+ adding support for "s3cmd du" command. |
|
3 | 5 |
* setup.cfg: Require Python 2.5 in RPM. Otherwise it needs |
4 | 6 |
to require additional python modules (e.g. ElementTree) |
5 | 7 |
which may have different names in different distros. It's |
... | ... |
@@ -24,6 +24,49 @@ from S3.S3Uri import * |
24 | 24 |
def output(message): |
25 | 25 |
print message |
26 | 26 |
|
27 |
+def cmd_du(args): |
|
28 |
+ s3 = S3(Config()) |
|
29 |
+ if len(args) > 0: |
|
30 |
+ uri = S3Uri(args[0]) |
|
31 |
+ if uri.type == "s3" and uri.has_bucket(): |
|
32 |
+ subcmd_bucket_usage(s3, uri) |
|
33 |
+ return |
|
34 |
+ subcmd_bucket_usage_all(s3) |
|
35 |
+ |
|
36 |
+def subcmd_bucket_usage_all(s3): |
|
37 |
+ response = s3.list_all_buckets() |
|
38 |
+ |
|
39 |
+ buckets_size = 0 |
|
40 |
+ for bucket in response["list"]: |
|
41 |
+ size = subcmd_bucket_usage(s3, S3Uri("s3://" + bucket["Name"])) |
|
42 |
+ if size != None: |
|
43 |
+ buckets_size += size |
|
44 |
+ output("") |
|
45 |
+ total_size, size_coeff = formatSize(buckets_size, Config().human_readable_sizes) |
|
46 |
+ output("Total Disk Usage: %s%s" % (str(total_size).rjust(8), size_coeff.ljust(1))) |
|
47 |
+ |
|
48 |
+def subcmd_bucket_usage(s3, uri): |
|
49 |
+ bucket = uri.bucket() |
|
50 |
+ object = uri.object() |
|
51 |
+ |
|
52 |
+ if object.endswith('*'): |
|
53 |
+ object = object[:-1] |
|
54 |
+ try: |
|
55 |
+ response = s3.bucket_list(bucket, prefix = object) |
|
56 |
+ except S3Error, e: |
|
57 |
+ if S3.codes.has_key(e.Code): |
|
58 |
+ error(S3.codes[e.Code] % bucket) |
|
59 |
+ return |
|
60 |
+ else: |
|
61 |
+ raise |
|
62 |
+ bucket_size = 0 |
|
63 |
+ for object in response["list"]: |
|
64 |
+ size, size_coeff = formatSize(object["Size"], False) |
|
65 |
+ bucket_size += size |
|
66 |
+ total_size, size_coeff = formatSize(bucket_size, Config().human_readable_sizes) |
|
67 |
+ output("Bucket %s Usage: %s%s" % (bucket, str(total_size).rjust(8), size_coeff.ljust(1))) |
|
68 |
+ return total_size |
|
69 |
+ |
|
27 | 70 |
def cmd_ls(args): |
28 | 71 |
s3 = S3(Config()) |
29 | 72 |
if len(args) > 0: |
... | ... |
@@ -229,6 +272,7 @@ commands_list = [ |
229 | 229 |
{"cmd":"mb", "label":"Make bucket", "param":"s3://BUCKET", "func":cmd_bucket_create, "argc":1}, |
230 | 230 |
{"cmd":"rb", "label":"Remove bucket", "param":"s3://BUCKET", "func":cmd_bucket_delete, "argc":1}, |
231 | 231 |
{"cmd":"ls", "label":"List objects or buckets", "param":"[s3://BUCKET[/PREFIX]]", "func":cmd_ls, "argc":0}, |
232 |
+ {"cmd":"du", "label":"Disk usage by buckets", "param":"[s3://BUCKET[/PREFIX]]", "func":cmd_du, "argc":0}, |
|
232 | 233 |
{"cmd":"la", "label":"List all object in all buckets", "param":"", "func":cmd_buckets_list_all_all, "argc":0}, |
233 | 234 |
{"cmd":"put", "label":"Put file into bucket", "param":"FILE [FILE...] s3://BUCKET[/PREFIX]", "func":cmd_object_put, "argc":2}, |
234 | 235 |
{"cmd":"get", "label":"Get file from bucket", "param":"s3://BUCKET/OBJECT LOCAL_FILE", "func":cmd_object_get, "argc":1}, |