#!/usr/bin/ksh # # This script finds the largest file in a file system # # File Name: find_hog # Location: /usr/local/bin # Modification: Tingli Pan # Date: 8-15-2006 # typeset -L60 file_name typeset -L40 blankhead typeset -L11 prot typeset -L9 owner typeset -L9 group typeset -R8 size typeset -R15 real_size typeset -R12 ksize typeset -L3 month typeset -R3 day typeset -L5 year # blankhead=" " file_system=${1:-"missing"} list_leng=${2:-"18"} if [[ $file_system = "missing" ]] then echo "Need file system name." exit fi if [[ $(echo $file_system | cut -c 1) != "/" ]] then file_system="/$file_system" fi if [[ -z $(df -k | grep " $file_system$") && -z $(df -k | grep "$file_system ") ]] then echo " -> File system $file_system can not be found." exit fi if [[ -n $(df -k | grep " $file_system$" | grep ":") ]] then echo " -> $file_system is an nfs file system." exit fi DU=du HOSTNAME=$(hostname) HOGFILE="/tmp/hogfile.$HOSTNAME$(echo $file_system|tr '/' '-')" SYS_OS=$(uname -a | awk '{print $1}') USED=0 case "$SYS_OS" in "OSF1") FDM_NAME=$(df -k | grep "$file_system$" | awk '{print $1}' | cut -f 1 -d "#") for i in $(df -k | grep $FDM_NAME |awk '{print $3}') do USED=$(($USED+$i)) done TOTAL=$(df -k $file_system |grep $file_system |awk '{print $2}') ;; "HP-UX") USED=$(df -k $file_system | head -3 | tail -1 | awk '{print $1}') TOTAL=$(df -k $file_system | head -1 | awk -F: '{print $2}' |awk '{print $1}') ;; SunOS) USED=$(df -k $file_system |grep $file_system |awk '{print $3}') TOTAL=$(df -k $file_system |grep $file_system |awk '{print $2}') DU=/usr/xpg4/bin/du ;; AIX) USED=$(df -k $file_system | tail -1 | awk '{print $3}') TOTAL=$(df -k $file_system | tail -1 | awk '{print $2}') USED=$(($TOTAL-$USED)) ;; esac PERC=$(($USED*100/$TOTAL)) TOTAL=$(($TOTAL/1000)) USED=$(($USED/1000)) clear echo "The hogs in $file_system of $HOSTNAME with $TOTAL M total and $USED M ($PERC%) used...\n\r" echo "The hogs in $file_system of $HOSTNAME with $TOTAL M total and $USED M ($PERC%) used:\n\r" > $HOGFILE echo "File Name Size Owner/Group Date" echo "File Name Size Owner/Group Date" >> $HOGFILE # i=1 $DU -axk $file_system | sort -rn | while read size file do if [[ -f $file ]] then if [[ `expr $i` -gt $list_leng ]] then echo "" echo " *********** End of the result. The log file is $HOGFILE. *********** " exit else i=$(($i+1)) ls -l "$file" | read prot links owner group real_size month day year real_file_name size=$(($real_size/1000000)) ksize=$(($real_size/1000)) file_name="$real_file_name" file_size=${#real_file_name} if [[ $(($file_size)) -gt 60 ]] then echo "" >> $HOGFILE echo "$real_file_name" >> $HOGFILE echo "$blankhead$ksize Kb $owner$group$month$day $year" >> $HOGFILE else echo "$file_name$ksize Kb $owner$group$month$day $year" >> $HOGFILE fi echo "$file_name$size M $owner$group$month$day $year" fi fi done