commit 206e73dc5bbb5efcc1682189be088505ac7ca3b8 Author: neingeist Date: Sat Jun 27 15:14:22 2015 +0200 Add find-junk diff --git a/find-junk b/find-junk new file mode 100755 index 0000000..f714cf0 --- /dev/null +++ b/find-junk @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# Find junk in my home directory + +from __future__ import division, print_function + +from colorama import Fore +import os +import os.path +import sys + +M = 1024*1024 + + +def junk_dirs(): + """Return directories which potentially contain junk""" + + for d in ['~/tmp', '~/.local/share/Trash', '~/rpmbuild', '~/RPM']: + d = os.path.expanduser(d) + if os.path.exists(d): + yield d + for d, _, _ in os.walk(os.path.expanduser('~')): + if d.endswith('.sync/Archive'): + yield d + + +def du(path): + """Return disk usage of the given directory""" + + def get_blocks(path): + stat = os.stat(path) + return (stat.st_ino, stat.st_blocks) + + dd = {} + ino, blocks = get_blocks(path) + dd[ino] = blocks + for dirpath, dirnames, filenames in os.walk(path): + for filename in dirnames + filenames: + path = os.path.join(dirpath, filename) + if os.path.exists(path): + ino, blocks = get_blocks(path) + dd[ino] = blocks + + return 512 * sum(dd.values()) + + +def main(): + for d in junk_dirs(): + if os.path.isdir(d): + du_d = du(d) + + if du_d < 5*M: + continue + + if du_d > 100*M: + fore = Fore.RED + elif du_d > 50*M: + fore = Fore.YELLOW + else: + fore = Fore.RESET + + print(fore + str(du_d//M) + 'M\t' + d + Fore.RESET) + + +main()