| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | #! /usr/local/python | 
					
						
							|  |  |  | # Format du output in a tree shape | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-30 11:31:39 +00:00
										 |  |  | import os, string, sys | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											1992-03-30 11:31:39 +00:00
										 |  |  | 	p = os.popen('du ' + string.join(sys.argv[1:]), 'r') | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 	total, d = None, {} | 
					
						
							|  |  |  | 	for line in p.readlines(): | 
					
						
							| 
									
										
										
										
											1992-08-31 10:54:54 +00:00
										 |  |  | 		i = 0 | 
					
						
							|  |  |  | 		while line[i] in '0123456789': i = i+1 | 
					
						
							|  |  |  | 		size = eval(line[:i]) | 
					
						
							|  |  |  | 		while line[i] in ' \t': i = i+1 | 
					
						
							|  |  |  | 		file = line[i:-1] | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 		comps = string.splitfields(file, '/') | 
					
						
							|  |  |  | 		if comps[0] == '': comps[0] = '/' | 
					
						
							|  |  |  | 		if comps[len(comps)-1] == '': del comps[len(comps)-1] | 
					
						
							|  |  |  | 		total, d = store(size, comps, total, d) | 
					
						
							|  |  |  | 	display(total, d) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def store(size, comps, total, d): | 
					
						
							|  |  |  | 	if comps == []: | 
					
						
							|  |  |  | 		return size, d | 
					
						
							|  |  |  | 	if not d.has_key(comps[0]): | 
					
						
							|  |  |  | 		d[comps[0]] = None, {} | 
					
						
							|  |  |  | 	t1, d1 = d[comps[0]] | 
					
						
							|  |  |  | 	d[comps[0]] = store(size, comps[1:], t1, d1) | 
					
						
							|  |  |  | 	return total, d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def display(total, d): | 
					
						
							|  |  |  | 	show(total, d, '') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def show(total, d, prefix): | 
					
						
							|  |  |  | 	if not d: return | 
					
						
							|  |  |  | 	list = [] | 
					
						
							|  |  |  | 	sum = 0 | 
					
						
							|  |  |  | 	for key in d.keys(): | 
					
						
							|  |  |  | 		tsub, dsub = d[key] | 
					
						
							|  |  |  | 		list.append((tsub, key)) | 
					
						
							|  |  |  | 		if tsub is not None: sum = sum + tsub | 
					
						
							|  |  |  | 	if sum < total: | 
					
						
							| 
									
										
										
										
											1992-03-30 11:31:39 +00:00
										 |  |  | 		list.append((total - sum, os.curdir)) | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 	list.sort() | 
					
						
							|  |  |  | 	list.reverse() | 
					
						
							|  |  |  | 	width = len(`list[0][0]`) | 
					
						
							|  |  |  | 	for tsub, key in list: | 
					
						
							|  |  |  | 		if tsub is None: | 
					
						
							|  |  |  | 			psub = prefix | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			print prefix + string.rjust(`tsub`, width) + ' ' + key | 
					
						
							|  |  |  | 			psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1) | 
					
						
							|  |  |  | 		if d.has_key(key): | 
					
						
							|  |  |  | 			show(tsub, d[key][1], psub) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main() |