#!/bin/bash

# diskhogs--Disk quota analysis tool for Unix; assumes all user 
#   accounts are >= UID 100. Emails message to each violating user
#   and reports a summary to the screen.

MAXDISKUSAGE=1
violators="/tmp/diskhogs0.$$"

trap "`which rm` -f $violators" 0

for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 99 { print $1 }')
do
  echo -n "$name "
  # You might need to modify the following list of directories to match
  #   the layout of your disk. Most likely change: /Users to /home 
  find / /usr /var /Users -xdev -user $name -type f -ls | \
      awk '{ sum += $7 } END { print sum / (1024*1024) }'

done | awk "\$2 > $MAXDISKUSAGE { print \$0 }" > $violators

if [ ! -s $violators ] ; then
  echo "No users exceed the disk quota of ${MAXDISKUSAGE}MB"
  cat $violators
  exit 0
fi

while read account usage ; do

cat << EOF | fmt | mail -s "Warning: $account Exceeds Quota" $account
Your disk usage is ${usage}MB, but you have been allocated only
${MAXDISKUSAGE}MB. This means that you need to either delete some of 
your files, compress your files (see 'gzip' or 'bzip2' for powerful and
easy-to-use compression programs), or talk with us about increasing
your disk allocation.

Thanks for your cooperation in this matter.

Dave Taylor @ x554
EOF

echo "Account $account has $usage MB of disk space. User notified."

done < $violators

exit 0
