This repository has been archived by the owner on May 10, 2024. It is now read-only.
/
lss3
executable file
·77 lines (70 loc) · 2.22 KB
/
lss3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env python
import boto
from boto.s3.connection import OrdinaryCallingFormat
def sizeof_fmt(num):
for x in ['b ','KB','MB','GB','TB', 'XB']:
if num < 1024.0:
return "%3.1f %s" % (num, x)
num /= 1024.0
return "%3.1f %s" % (num, x)
def list_bucket(b, prefix=None):
"""List everything in a bucket"""
from boto.s3.prefix import Prefix
from boto.s3.key import Key
total = 0
query = b
if prefix:
if not prefix.endswith("/"):
prefix = prefix + "/"
query = b.list(prefix=prefix, delimiter="/")
print "%s" % prefix
num = 0
for k in query:
num += 1
mode = "-rwx---"
if isinstance(k, Prefix):
mode = "drwxr--"
size = 0
else:
size = k.size
for g in k.get_acl().acl.grants:
if g.id == None:
if g.permission == "READ":
mode = "-rwxr--"
elif g.permission == "FULL_CONTROL":
mode = "-rwxrwx"
if isinstance(k, Key):
print "%s\t%s\t%010s\t%s" % (mode, k.last_modified,
sizeof_fmt(size), k.name)
else:
#If it's not a Key object, it doesn't have a last_modified time, so
#print nothing instead
print "%s\t%s\t%010s\t%s" % (mode, ' '*24,
sizeof_fmt(size), k.name)
total += size
print "="*80
print "\t\tTOTAL: \t%010s \t%i Files" % (sizeof_fmt(total), num)
def list_buckets(s3):
"""List all the buckets"""
for b in s3.get_all_buckets():
print b.name
if __name__ == "__main__":
import sys
pairs = []
mixedCase = False
for name in sys.argv[1:]:
if "/" in name:
pairs.append(name.split("/",1))
else:
pairs.append([name, None])
if pairs[-1][0].lower() != pairs[-1][0]:
mixedCase = True
if mixedCase:
s3 = boto.connect_s3(calling_format=OrdinaryCallingFormat())
else:
s3 = boto.connect_s3()
if len(sys.argv) < 2:
list_buckets(s3)
else:
for name, prefix in pairs:
list_bucket(s3.get_bucket(name), prefix)