|
|
|
#!/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"""
|
|
|
|
|
|
|
|
static_junk_dirs = [
|
|
|
|
"~/tmp",
|
|
|
|
"~/.local/share/Trash",
|
|
|
|
"~/rpmbuild",
|
|
|
|
"~/RPM",
|
|
|
|
"~/.cache/tracker",
|
|
|
|
"~/.local/share/apt-dater/history",
|
|
|
|
]
|
|
|
|
for d in static_junk_dirs:
|
|
|
|
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()
|