#! /bin/bash # # Usage: mytree [ dir ... ] # # prints statistics about a directory tree # # hvf 06.01.04 22.01.04 # Version 4 mit find DIRS=0; REG=0; LINKS=0; PIPES=0; SOCKETS=0; CDEV=0; BDEV=0; OTHERS=0; TOTAL=0 function doit() { # does one level of directories and calls all subdirs for i # in $* do DIRLIST="`find $i -type d -maxdepth 1 -mindepth 1 | sort`" T=0 for x in f d l p s b c # Schleife durch alle Dateitypen do ANZ=`find $i -type $x -maxdepth 1 -mindepth 1 | wc -l` case $x in f) R=$ANZ # regular file REG=`expr $REG + $R`;; d) D=$ANZ # directory DIRS=`expr $DIRS + $D`;; l) L=$ANZ # symbolic link LINKS=`expr $LINKS + $L`;; p) P=$ANZ # named pipe PIPES=`expr $PIPES + $P`;; s) S=$ANZ # socket SOCKETS=`expr $SOCKETS + $S`;; b) B=$ANZ # block device BDEV=`expr $BDEV + $B`;; c) C=$ANZ # character device CDEV=`expr $CDEV + $C`;; esac T=`expr $T + $ANZ` done TOTAL=`expr $TOTAL + $T` printf "%6d%6d%6d%6d%6d%5d%5d%6d%6d %s\n" $D $R $L \ $P $S $C $B $OTHERS $T $i [ -n "$DIRLIST" ] && doit $DIRLIST done return } echo " Dirs Reg Lnks Pipes Socks Cdev Bdev Other Total Directory" echo "-----------------------------------------------------------------------" # Die Funktion doit arbeitet rekursiv die übergebenen Directories ab if test $# -eq 0 then doit . else doit $* fi echo "-----------------------------------------------------------------------"; printf "%6d%6d%6d%6d%6d%5d%5d%6d%6d %s\n" $DIRS $REG $LINKS \ $PIPES $SOCKETS $CDEV $BDEV $OTHERS $TOTAL total echo "-----------------------------------------------------------------------" exit 0