Apr 21
One of my common Python tools: use this to list out all the directories from the specified root on down, ignoring some common directories that are specified in the program. You might want to modify this code to read in your ignore list. The program will also optionally take a size limit so that it only lists directories where the storage usage is over that limit.
#!/usr/bin/python
#
# listdirtree.py -- print out the complete directory tree from the specified root directory,
# with Ignore list.
#
# usage:
# >listdirtree.py [{path to start with}] [{sizelimit to list}]
# >listdirtree.py / 2000000
# >listdirtree.py /home
# >listdirtree.py
#
# John Allen, April 2010
#
import os
import sys
ign = [
"/sys",
"/usr/lib",
"/usr/share",
"/usr/local/share",
"/lib/modules",
"/cdrom",
"/var/crash",
"/tmp",
"/dev",
"/proc",
"/devices",
"/var/run"
]
def showBranch(fcount, fpath, filelist):
global sizelimit
for i in ign:
try:
fpath.index(i)
return # found, don't process
except:
t = 1 ## Do nothing
fs = 0
for f in filelist:
fullf = os.path.join(fpath, f)
if os.path.islink(fullf): continue
if os.path.isfile(fullf):
fsx = os.path.getsize(fullf)
fs += fsx
fcount[0] += fsx
fcount[1] += 1
if os.path.isdir(fullf):
fcount[2] += 1
if (sizelimit == -1) or (fs > sizelimit):
print fullf + "=>" + str(fs)
def main():
global sizelimit
try:
root = sys.argv[1]
except:
root = "."
try:
sizelimit = int(sys.argv[2])
except:
sizelimit = -1
sums = [0,0,1] # 0 bytes, 0 files, 1 dir so far
os.path.walk(root,showBranch,sums)
print
print "There are " + str(sums[2]) + " directories."
if __name__ == "__main__":
main()
exit
The program is very handy when you need to see what directories are taking up too much space
>./listdirtree.py /var/log 12000000 /var/log/cups=>12263821 /var/log/prelink=>12801421 /var/log/mail=>13008127 /var/log/sa=>13130178 There are 7 directories.






