#!/bin/ksh

type ff >/dev/null 2>&1
[ "$?" = "0" ] || {
        echo "ERREUR: utilitaire ff non trouve"
        exit 1
}

[ -d "$1" ] || {
        echo "ERREUR: l'argument donne [$1] n'est pas un repertoire"
        exit 1
}

case $(uname -s)
in
        HP-UX)  DF=bdf
                                AWK=awk
                                MNTTAB="$($AWK '{print $1 " " $2}' /etc/mnttab)"
                                ;;
        AIX)            DF="df -k"
                                AWK=awk
                                MNTTAB="$(mount -p |$AWK '{print $1 " " $2}')"
                                ;;
        SunOS)                  DF="df -k"
                                AWK=nawk
                                MNTTAB="$($AWK '{print $1 " " $2}' /etc/mnttab)"
                                ;;
        *)                      echo "$(uname -s) non supporte"
                                exit 1
                                ;;
esac

SUFFIXES="BKMGTPEZY"
MAX_SUFF=${#SUFFIXES}
calc_number () {
        NUMBER=$1
        ITERATION=1
        while [ "$NUMBER" -gt "1023" ]
        do
                [ "$ITERATION" -ge "$MAX_SUFF" ] && break
                ITERATION=$(($ITERATION + 1))
                NUMBER=$(echo "scale=2; $NUMBER / 1024" |bc)
        done

        NUMBER=$(printf "%.2f" $NUMBER)
        [ -n "$(echo "$NUMBER" |fgrep ".00")" ] && {
                NUMBER=$(printf "%.0f" $NUMBER)
        }
        echo "${NUMBER}$(echo $SUFFIXES |cut -c${ITERATION})"
}

FS2A="$(cd $1 ; $DF . |tail -1 |$AWK '{print $NF}')"
[ "$?" = "0" ] || exit 1
echo "analyse du filesystem : $FS2A"

LVOL="$(echo "$MNTTAB" |$AWK -v S=$FS2A '{if($2 ~ "^" S "$"){print $1}}')"
echo "volume a analyser : $LVOL"

TMPFILE="/tmp/${0##*/}.$RANDOM.$$"

echo "Debut du traitement"
ff -s -I $LVOL >$TMPFILE 2>&1
[ "$?" = "0" ] || {
        echo "ERREUR: probleme au lancement du binaire ff"
        exit 1
}

FS2EXCL="$(echo "$MNTTAB" |cut -d" " -f 2 |grep "^$FS2A" |grep -v "^$FS2A$")"

WARN=0
for MNTFS in $FS2EXCL
do
        [ "$FS2A" = "/" ] || MNTFS="$(echo $MNTFS|sed "s@$FS2A@@")"
        SIZE="$(grep "^\.$MNTFS/" $TMPFILE |awk 'BEGIN{SIZE=0}{SIZE=(SIZE+$NF)}END{printf("%i\n", SIZE)}')"
        [ "$SIZE" -eq "0" ] || {
                QTY="$(grep "^\.$MNTFS/" $TMPFILE |wc -l)"
echo "WARNING: le repertoire $(echo ${FS2A}${MNTFS} |sed 's@//@/@') contient $QTY fichier(s) cache sous le point de montage [ $1 ] ($SIZE Bytes - $(calc_number $SIZE))"
                WARN="$(($WARN+1))"
        }
done

rm $TMPFILE

if [ "$WARN" -gt "0" ]
        then
                [ "$WARN" -gt "1" ] && s=sont t=s || s=est u=
                echo "WARNING: $WARN filesystem$t $s monte$t sur des fichiers"
        else
                echo "INFO: aucun fichiers sous des points de montage"
fi

exit 0

