Date: Thu, 9 Dec 1999 10:49:30 -0500 (EST) From: "Crist J. Clark" <cjc@cc942873-a.ewndsr1.nj.home.com> To: jconner@enterit.com (Jim Conner) Cc: freebsd-questions@FreeBSD.ORG (FreeBSD Questions) Subject: Re: hopefully three simple questions Message-ID: <199912091549.KAA60420@cc942873-a.ewndsr1.nj.home.com> In-Reply-To: <4.2.0.58.19991208084058.009ac100@mail.enterit.com> from Jim Conner at "Dec 8, 1999 08:44:50 am"
next in thread | previous in thread | raw e-mail | index | archive | help
Jim Conner wrote, > I sent these to Crist last night. The shell script doesn't work :) (what > can I say...I threw it together in 20 minutes)....however, the find will at > least give a count of files in each directory based on where you run the > find command from and store the output to a file of your choice. I don't > think you will be able to answer this guy's questions with simple command > on the command line. Its going to require scripting (I think) > > find . -type d -exec wc -l {} \; >files.out I don't see how that would work. You are using wc(1) on the diretory, which in this context is a binary file with some info in it. It does not give the right answer, % ls -a / . boot.help kernel.GENERIC share usr2 .. c kernel.config stand usr3 .cshrc cdrom kernel.old sys usr4 .profile compat mnt tmp var COPYRIGHT dev modules u1 bin etc proc u2 boot home root users boot.config kernel sbin usr % ls -a / | wc -l 36 % wc -l / 4 / > #!/bin/ksh > > counter=0 > var=0 > file=files.out > find . -type d -exec wc -l {} \; >$file > > for loop in `cat $file | grep -E [0-9] | awk '{print $1}'` > do > counter=$((counter + 1)) > var[$counter]=$loop > if [ $counter = 2 ] > then > if [ ${var[1]} -gt ${var[2]} ] > then > largest=${var[1]} > counter=1 > elif [ ${var[2]} -gt ${var[1]} ] > then > largest=${var[2]} > counter=1 > else > counter=1 > fi > else > blah=0 > fi > done > echo "The largest directory had $largest files: `grep $largest $file`" > rm $file I think the best way to do this would be a recursive shell script, #!/bin/sh # # dirmax - cjc, 1999/12/09 # # usage: dirmax [dir] # # Returns the maximum depth and number of members in # the directory with the most members on stdout. If # no argument is give, the pwd is used. # This function takes the following args, # usage: dirstats dir depth maxdepth dirstats () { cd $1 MAXNUM=`ls -A | wc -l` MAXDEPTH=0 for DIR in `ls -A`; do if [ -d $DIR ]; then set -- `dirstats $DIR $MAXDEPTH` if [ $1 -gt $MAXDEPTH ]; then MAXDEPTH=$1 fi if [ $2 -gt $MAXNUM ]; then MAXNUM=$2 fi fi done MAXDEPTH=`expr $MAXDEPTH + 1` echo $MAXDEPTH $MAXNUM } if [ $# -gt 1 ]; then echo "$0: usage: dirmax [dir]" >&2 elif [ $# -eq 0 ]; then STARTDIR=. else STARTDIR=$1 fi dirstats $STARTDIR 0 exit 0 Fair warning: There are no checks for symbolic links making infinte loops, handling of directories without read permissions, etc. -- Crist J. Clark cjclark@home.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199912091549.KAA60420>