Just one more testiment to the level of knowledge that maybe found in these 
support channels. Thanks to Peter the script is perfect. Thanks again.

-Paul

On Friday 13 April 2001 17:47, you wrote:
> At 05:04 PM 4/13/01 -0700, Paul Fontenot wrote:
> >Here is the actual code and output, I am allready using system, but was
> >hoping for a perl only solution.
>
> Fair enough.  I'll point you in the right direction, then.  Up to you to
> read the documentation and fill in the details, okay?
>
> Since I don't see something out there that already does what you want,
> you'll need to use File::Find to recurse over directories to do what du
> does.  Something like
>
> use File::Find;
>
> # Put home directory in $home
> $disk_space = du($home);
>
> sub du {
>    my $total = 0;
>    find( sub { $total += -s if -f; return 1 }, shift);
>    return $total;
> }
>
> This subroutine will return the number of bytes in regular files under the
> directory path passed into it.  To understand it, you'll need to read these
> pages:
>
> File::Find
> perlsub
> perlref
> perlfunc  - look for -X functions
>
> Now, as to your program:
> >#!/usr/bin/perl -w
>
> Always program with "use strict".
>
> >#
> >#
> >open(PASSWD, "/etc/passwd");
> >
> >while (<PASSWD>) {
> >         @fields = split /:/;
>
> Predeclare variables with 'my' (use strict will make this more or less
> essential).
>
> >         if ($fields[2] >= 500) {
> >                 chdir $fields[5];
> >                 $disk_space = system("du -s .");
>
> system() runs the command, it doesn't save the output.  That's why it
> printed the figure out early and instead in your formatted output you got
> the return code of system (0) instead of the du output.  You need backticks
> (``).  See perlop, "Regexp Quote-Like Operators".
>
> >                 write;
> >         }
> >}
> >close(PASSWD);
> >
> >format STDOUT_TOP=
> >
> >                                 Disk Usage Stats
> >==========================================================================
> >=====
> >
> >Name                    User Name       Home directory          Disk usage
> >.
> >
> >
> >format STDOUT=
> >@<<<<<<<<<<<<<<<<<      @<<<<<<<<       @<<<<<<<<<<<<<<         @####.##
> > Mb $fields[4],             $fields[0],     $fields[5],            
> > $disk_space .
> >
> >And this is what the output looks like:
> >
> >421676  . <--- This should be under the disk usage column
> >
> >                                 Disk Usage Stats
> >==========================================================================
> >=====
> >
> >Name                    User Name       Home directory          Disk usage
> >Paul Fontenot           paul            /home/paul                  0.00
> > Mb 18132   . <--- So should this
> >Heather Fontenot        heather         /home/heather               0.00
> > Mb
> >
> >Thanks for any formatting help.
> >
> >-Paul
> >
> >On Friday 13 April 2001 16:56, you wrote:
> > > At 04:02 PM 4/13/01 -0700, Paul Fontenot wrote:
> > > >Hello,
> > > >         How can I get a summary of the file sizes in a directory with
> > > > perl? Like a
> > > >"du -s ." ?
> > >
> > > du walks the directory tree summing all the components in
> > > subdirectories; Perl code to do that is going to be more than a few
> > > lines.  Any reason you can't do
> > >
> > >   system("du -s .")
> > >
> > > ?  Otherwise you've got some work ahead of you with File::Find, since I
> > > can't see any module on CPAN for this.
> > > --
> > > Peter Scott
> > > Pacific Systems Design Technologies
> >
> >--
> >   4:59pm  up  7:53,  3 users,  load average: 1.66, 1.57, 1.73
>
> --
> Peter Scott
> Pacific Systems Design Technologies

-- 
  7:25pm  up 10:19,  3 users,  load average: 1.03, 1.09, 1.13

Reply via email to