annotate Tools/scripts/dutree.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 73758db2f464
children f057751cef61
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1269
diff changeset
1 #! /usr/bin/env python
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # Format du output in a tree shape
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
760
9b671f397a8f posix -> os
Guido van Rossum <guido@python.org>
parents: 687
diff changeset
4 import os, string, sys
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 def main():
760
9b671f397a8f posix -> os
Guido van Rossum <guido@python.org>
parents: 687
diff changeset
7 p = os.popen('du ' + string.join(sys.argv[1:]), 'r')
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 total, d = None, {}
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 for line in p.readlines():
1002
0ce404e4139c cope with filenames containing spaces
Guido van Rossum <guido@python.org>
parents: 760
diff changeset
10 i = 0
0ce404e4139c cope with filenames containing spaces
Guido van Rossum <guido@python.org>
parents: 760
diff changeset
11 while line[i] in '0123456789': i = i+1
0ce404e4139c cope with filenames containing spaces
Guido van Rossum <guido@python.org>
parents: 760
diff changeset
12 size = eval(line[:i])
0ce404e4139c cope with filenames containing spaces
Guido van Rossum <guido@python.org>
parents: 760
diff changeset
13 while line[i] in ' \t': i = i+1
0ce404e4139c cope with filenames containing spaces
Guido van Rossum <guido@python.org>
parents: 760
diff changeset
14 file = line[i:-1]
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 comps = string.splitfields(file, '/')
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 if comps[0] == '': comps[0] = '/'
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 if comps[len(comps)-1] == '': del comps[len(comps)-1]
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 total, d = store(size, comps, total, d)
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 display(total, d)
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 def store(size, comps, total, d):
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 if comps == []:
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 return size, d
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 if not d.has_key(comps[0]):
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 d[comps[0]] = None, {}
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 t1, d1 = d[comps[0]]
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 d[comps[0]] = store(size, comps[1:], t1, d1)
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 return total, d
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 def display(total, d):
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 show(total, d, '')
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 def show(total, d, prefix):
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 if not d: return
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 list = []
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 sum = 0
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 for key in d.keys():
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 tsub, dsub = d[key]
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 list.append((tsub, key))
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 if tsub is not None: sum = sum + tsub
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 if sum < total:
760
9b671f397a8f posix -> os
Guido van Rossum <guido@python.org>
parents: 687
diff changeset
42 list.append((total - sum, os.curdir))
687
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 list.sort()
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 list.reverse()
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 width = len(`list[0][0]`)
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 for tsub, key in list:
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 if tsub is None:
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 psub = prefix
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 else:
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 print prefix + string.rjust(`tsub`, width) + ' ' + key
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 if d.has_key(key):
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 show(tsub, d[key][1], psub)
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
e15bea971a5b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 main()