#!/usr/bin/env python## Well this is a bloody kickass little app which tells you things which could# really be obtained elsewhere, but what are you going to do 'eh! It walks a# directory structure and collects the number of files, as well as their size,# then prints whichever data you like. bla bla bla! The root directory will be# the current working diectory unless you specify another location with the -d# switch (good idea). One important thing to note is that data is easy to read# because it will tell you what the numbers are for, except when using the -r# switch which just spits the numbers out seperated by a space. In this case# the numbers are in the same order.#import getoptimport sysimport osimport datetime# Settings.ShowTimestamp = FalseShowDirCount = FalseShowFileCount = FalseShowAverageFileSize = FalseShowTotalFileSize = FalseRootDir = os.getcwd()ShowRaw = Falsedef Traverse(Path): # Working values. global FileCount global DirCount global TotalFileSize # Get all children. try: Children = os.listdir(Path) except OSError, (errno, strerror): return for Child in Children: if os.path.isdir(Path + '/' + Child): DirCount += 1 Traverse(Path + '/' + Child) elif os.path.isfile(Path + '/' + Child): FileCount += 1 TotalFileSize += os.path.getsize(Path + '/' + Child)def GetTimestamp(): if ShowTimestamp: return datetime.datetime.now() else: return Nonedef GetDirCount(): if ShowDirCount: return DirCount else: return Nonedef GetFileCount(): if ShowFileCount: return FileCount else: return Nonedef GetAverageFileSize(): if ShowAverageFileSize: return TotalFileSize / FileCount else: return Nonedef GetTotalFileSize(): if ShowTotalFileSize: return TotalFileSize else: return Nonedef Usage(): print 'some day this app will be cool enough to have a usage description!'# Set initial global values.FileCount = 0DirCount = 0TotalFileSize = 0# Get commandline parameters and make sure they are valid.try: opts, args = getopt.getopt(sys.argv[1:], "d:tcfraoah", ["dir=", "timestamp", "circount", "filecount", "raw", "avgfilesize", "totalfilesize", "all", "help"])except getopt.GetoptError: Usage() sys.exit()# Set application options.for o, a in opts: if o in ("-d", "--dir"): RootDir = a if o in ("-t", "--timestamp"): ShowTimestamp = True if o in ("-c", "--dircount"): ShowDirCount = True if o in ("-f", "--filecount"): ShowFileCount = True if o in ("-r", "--raw"): ShowRaw = True if o in ("-a", "--avgfilesize"): ShowAverageFileSize = True if o in ("-o", "--totalfilesize"): ShowTotalFileSize = True if o in ("-a", "--all"): ShowTimestamp = True ShowDirCount = True ShowFileCount = True ShowAverageFileSize = True ShowTotalFileSize = True if o in ("-h", "--help"): Usage() sys.exit()# Must not have trailing slash!Traverse(RootDir)def PrintResults(): if ShowRaw: print "%s %s %s %s %s" % (GetTimestamp(), GetDirCount(), GetFileCount(), GetAverageFileSize(), GetTotalFileSize()) else: print """Timestamp = %sDirectory Count = %sFile Count = %sAverage File Size = %sTotal File Size = %s""" % (GetTimestamp(), GetDirCount(), GetFileCount(), GetAverageFileSize(), GetTotalFileSize())PrintResults()