Determining the number of files in a directory

Gary Kline kline at tao.thought.org
Sat Nov 3 14:42:15 PDT 2007


On Sat, Nov 03, 2007 at 09:07:18PM +0100, cpghost wrote:
> On Sat, 3 Nov 2007 10:44:43 -0400
> John Nielsen <lists at jnielsen.net> wrote:
> 
> > On Saturday 03 November 2007, Daniel Bye wrote:
> > > On Sat, Nov 03, 2007 at 12:41:51PM +0000, Daniel Bye wrote:
> > > > On Sat, Nov 03, 2007 at 05:27:06AM -0700, White Hat wrote:
> > > > > This is probably a dumb question; however, I never let a little
> > > > > thing like that bother me in the past.
> > > >
> > > > Heheh! You and many more, my friend, myself absolutely included!
> > > >
> > > > > Using FreeBSD-6.2 and Bash, how do I determine the number of
> > > > > files in a given directory? I have tried all sorts of
> > > > > combinations using different flags with the 'ls' command;
> > > > > however, none of them displays the number of files in the
> > > > > directory.
> > > >
> > > >  $ ls | wc -l
> > > >
> > > > will show you how many files and directories in the current
> > > > (target) directory. To count just files, and exclude directories,
> > > > you could try something like
> > > >
> > > >  $ find /target/directory -type f -print | wc -l
> > >
> > > Except of course, that would descend into the subdirectories you're
> > > trying not to count... Sorry - an object lesson in not hitting send
> > > before you've tested what you scribbled.
> > 
> > find /target/directory -type f -maxdepth 1 | wc -l
> > 
> > should do the trick. See also man find and man wc, of course.
> 
> That's better than ls(1), which is terribly slow at displaying
> (actually: at sorting) large directories. In this case, better
> turn off sorting with 'ls -f':
> 
> $ time ls -f /usr/local/news/News | wc -l
>         0.42 real         0.29 user         0.07 sys
>    35935
> 
> $ time ls /usr/local/news/News | wc -l
>       147.02 real        33.92 user         0.07 sys
>    35935


	And ls -lf makes working with awk faster, too. E.g:

 % ls -lf | awk '$8 == 2007 {print $9}'
 % ls -ltf | awk '$8 == 2007 {print $9}'

	If you've got  a large number of files, ls -lf is roughly 
	twice as fast.


	gary

> 
> -cpghost.
> 
> -- 
> Cordula's Web. http://www.cordula.ws/
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"

-- 
  Gary Kline  kline at thought.org   www.thought.org  Public Service Unix
      http://jottings.thought.org   http://transfinite.thought.org



More information about the freebsd-questions mailing list