Files
q-tools/reporting/file_usage_by_name.py
2017-01-30 18:36:58 +02:00

70 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python
import sys
import os
import pwd
from argparse import ArgumentParser
MINSIZE=0
def setup_options():
parser=ArgumentParser(description="List file usage")
parser.add_argument('startpath', action="append", nargs='+')
options=parser.parse_args()
return options
def add_recurse(db,options,start):
for path,dirs,files in os.walk(start,followlinks=False):
files=clean_syms(files,path)
for f in files:
filename=os.path.join(path,f)
stats=os.stat(filename)
owner=stats.st_uid
size=stats.st_size
if not owner in db:
db[owner]=0
db[owner]+=size
return db
def clean_syms(files,path):
nonsyms=[]
for f in files:
if not os.path.islink(os.path.join(path,f)):
nonsyms.append(f)
return nonsyms
def print_db(db):
namedb=dict()
for u in db:
try:
namedb[pwd.getpwuid(u).pw_name]=humanize_size(db[u])
except:
namedb[str(u)]=humanize_size(db[u])
names=namedb.keys()
names.sort()
for n in names:
print(n+": "+namedb[n])
def humanize_size(size,precision=1):
if size==None:
return 'nan'
suffixes=['B','KB','MB','GB','TB']
suffixIndex = 0
defPrecision=0
while size > 1024:
suffixIndex += 1 #increment the index of the suffix
size = size/1024.0 #apply the division
defPrecision=precision
return "%.*f%s"%(defPrecision,size,suffixes[suffixIndex])
def main():
options=setup_options();
db=dict()
for f in options.startpath[0]:
db=add_recurse(db,options,f)
print_db(db)
sys.exit(0)
main()