#!/bin/bash

# ----------------------------------------------------------------------
# donne la taille totale en octets du directory et subdirectory
# (somme de tous les fichiers, sans la taille reservee pour le directory
#  qui est systeme-dependant).
# Donne aussi le nombre total de fichiers et de sous directories.
# P. Robert, Janvier 2007
# revu P.R. Novembre 2009, pour portabilite linux-Solaris
# ----------------------------------------------------------------------

appli=`basename $0`
 
if (test $# = 1 ) 
   then
      if (test $1 = help )
         then echo "$appli : Give directory size (octets or Mo), nb. files & directories"
              echo "Usage: dir_properties"
              echo "       dir_properties Mo"
              echo "       dir_properties DIR"
              echo "       dir_properties DIR Mo"
              exit 1
   fi
fi

Mo=no
dir=.
bb="basename `pwd | sed 's/ /\?/g'`"
nomdir=`$bb`
homdir=$HOME

if test $# != 0
    then
       if (test $# = 1 ) && (test $1  = Mo ) ; then Mo=yes ; fi
       if (test $# = 1 ) && (test $1 != Mo ) 
          then 
              dir=$1
              nomdir=$1
       fi
       
       if (test $# = 2 ) && (test $2 = Mo )
          then 
              Mo=yes
              dir=$1
              nomdir=$1
       fi
fi

if test -f $homdir/toto_$$.tmp ; then rm $homdir/toto_$$.tmp ; fi

# on prends tous les champs car certaine lignes peuvent commencer par des blancs

if test -d $dir
   then
      ls -oRq $dir | grep \^- | sed "s/.......... *. //" | cut -d " " -f 2-100 > $homdir/toto_$$.tmp
   else
      echo "*** Directory $dir does not exist"
      echo "*** $appli aborted !"
      exit 2
fi


nbfiles=`find $dir -type f | wc -l`
nbdirp1=`find $dir -type d | wc -l`
nbdir=`expr $nbdirp1 - 1`

# max size: 99.999 To

# sous bash, le print en decimal " %14.1d" donne des resultats faux !
# mais ils sont vrais en flottants...
#totsize=`awk '{Somme +=$1} END {printf(" %14.1d\n", Somme)}' $homdir/toto_$$.tmp`
 totsize=`awk '{Somme +=$1} END {printf(" %14.0f\n", Somme)}' $homdir/toto_$$.tmp`


# max number of files : 99 999 999 files
# max number of dir   :    999 999 dir

nbfilm=`printf " %8.0f" $nbfiles`
nbdirm=`printf " %6.0f" $nbdir`

if  (test $Mo = yes )
    then 
        totsize=`expr $totsize / 1000000`
        totsize=`printf " %9.0f" $totsize`
fi

echo "$totsize $nbfilm $nbdirm $nomdir"
rm $homdir/toto_$$.tmp 
