All pastes #834914 Raw Edit

Stuff

public text v1 · immutable
#834914 ·published 2007-12-28 15:50 UTC
rendered paste body
#!/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 getopt
import sys
import os
import datetime

# Settings.
ShowTimestamp = False
ShowDirCount = False
ShowFileCount = False
ShowAverageFileSize = False
ShowTotalFileSize = False
RootDir = os.getcwd()
ShowRaw = False

def 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 None

def GetDirCount():
	if ShowDirCount:
		return DirCount
	else:
		return None

def GetFileCount():
	if ShowFileCount:
		return FileCount
	else:
		return None

def GetAverageFileSize():
	if ShowAverageFileSize:
		return TotalFileSize / FileCount
	else:
		return None

def GetTotalFileSize():
	if ShowTotalFileSize:
		return TotalFileSize
	else:
		return None

def Usage():
	print 'some day this app will be cool enough to have a usage description!'

# Set initial global values.
FileCount = 0
DirCount = 0
TotalFileSize = 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 = %s
Directory Count = %s
File Count = %s
Average File Size = %s
Total File Size = %s""" % (GetTimestamp(), GetDirCount(), GetFileCount(), GetAverageFileSize(), GetTotalFileSize())

PrintResults()