| 
									
										
										
										
											1996-11-27 19:52:01 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | # Format du output in a tree shape | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-11 20:36:02 +00:00
										 |  |  | import os, sys, errno | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2002-09-11 20:36:02 +00:00
										 |  |  |     p = os.popen('du ' + ' '.join(sys.argv[1:]), 'r') | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     total, d = None, {} | 
					
						
							|  |  |  |     for line in p.readlines(): | 
					
						
							|  |  |  |         i = 0 | 
					
						
							|  |  |  |         while line[i] in '0123456789': i = i+1 | 
					
						
							|  |  |  |         size = eval(line[:i]) | 
					
						
							|  |  |  |         while line[i] in ' \t': i = i+1 | 
					
						
							| 
									
										
										
										
											2003-05-13 18:14:25 +00:00
										 |  |  |         filename = line[i:-1] | 
					
						
							|  |  |  |         comps = filename.split('/') | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |         if comps[0] == '': comps[0] = '/' | 
					
						
							|  |  |  |         if comps[len(comps)-1] == '': del comps[len(comps)-1] | 
					
						
							|  |  |  |         total, d = store(size, comps, total, d) | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         display(total, d) | 
					
						
							|  |  |  |     except IOError, e: | 
					
						
							|  |  |  |         if e.errno != errno.EPIPE: | 
					
						
							|  |  |  |             raise | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def store(size, comps, total, d): | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def display(total, d): | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     show(total, d, '') | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def show(total, d, prefix): | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2001-01-17 09:13:33 +00:00
										 |  |  | ##  if sum < total: | 
					
						
							|  |  |  | ##      list.append((total - sum, os.curdir)) | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     list.sort() | 
					
						
							|  |  |  |     list.reverse() | 
					
						
							| 
									
										
										
										
											2004-02-12 17:35:32 +00:00
										 |  |  |     width = len(repr(list[0][0])) | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     for tsub, key in list: | 
					
						
							|  |  |  |         if tsub is None: | 
					
						
							|  |  |  |             psub = prefix | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2002-09-11 20:36:02 +00:00
										 |  |  |             print prefix + repr(tsub).rjust(width) + ' ' + key | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |             psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1) | 
					
						
							|  |  |  |         if d.has_key(key): | 
					
						
							|  |  |  |             show(tsub, d[key][1], psub) | 
					
						
							| 
									
										
										
										
											1992-03-02 16:20:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-02 22:18:25 +00:00
										 |  |  | main() |