----- Original Message ----
From: oryann9 <[EMAIL PROTECTED]>
To: beginners@perl.org
Sent: Friday, January 11, 2008 2:32:11 PM
Subject: Re: find2perl


>You're misusing it.  Set it within the wanted() routine when you're
 >looking at
>a directory that you don't want to descend.  It'll be cleared to 0
 >before
>calling wanted(), so setting it before calling find() is completely
 >useless.

>-- 
>Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777
 >0095
><[EMAIL PROTECTED]> <URL:http://www.stonehenge.com/merlyn/>
>Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.

-

Will anyone help me with this issue? These three lines of code work, but work 
in a way that I am not expecting. When I tell this module to set no_chdir to 1 
it should NOT descend directories yet it does. Am I supposed to have a wanted 
routine other than whats below? Below are the 3 lines I have tried and below 
that is the entire script.

thank you!

1) File::Find::find ( { wanted => $wanted, no_chdir => $File::Find::no_chdir }, 
$fs ) ;

2) File::Find::find ( { wanted => $wanted, no_chdir => +shift }, $fs ) ;

3) File::Find::find ( { wanted => $wanted, no_chdir => $File::Find::no_chdir = 
shift}, $fs


#!/usr/bin/perl

use strict ;
use warnings ;
use File::Find ;
use File::Find::Closures qw(find_by_min_size) ;

##-- Begin Format Code --##

my ($key,$user,$grp,$mod,$sz) ;

format STDOUT_TOP =
Page @<<<
$%

FileName                                                                   
Owner    GroupOwner   LastMo
ate   Size
=========                                                                  
=======  ===========  ======
====  =====
.

format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   
@<<<<<<< @<<<<<<      @<<<<<
<<<   @##.###
$key,                                                                      
$user,   $grp,        date_m
,     $sz
.

##-- End Format Code --##

sub date_me {

        my $mod = shift @_ ;
        my ($seconds, $minutes, $hours, $day_of_month, $month, $year,
        undef, undef, undef) = localtime($mod) ;

        #printf("%02d:%02d:%02d-%02d/%02d/%04d",
        ( $hours, $minutes, $seconds, $month+1, $day_of_month, $year+1900 ) ;
}

my $log = qq(/var/adm/find_hog.log) ;
my $logg ;
open ($logg, '>>', $log) or warn "file '$logg' was not opened $!" ;

START:
print qq (\nPlease enter filesystem name in the form of /fsname or / just for 
root\n) ;
print "\n";
chomp (my $fs = <>) ;

if ( $fs eq "/" ) { # only if the root directory, do not descend.
    find_me ( $fs, 0 );
}
elsif ( $fs =~ m|^/\w+|i ) { ## matches /var
    find_me ( $fs, 1 );
}
elsif ( $fs =~ m|^[/.\w+]|i ) {  ## matches /.ssh
    find_me ( $fs, 1 );
}
else {
     warn "\nFilesystem name does not match expression.\nPlease contact Unix on 
call and or try again\n
     goto START;
}

my ( @sorted_large_files, @large_files ) ;

sub find_me {
    use Data::Dumper;
    my $fs = shift;
    #local $File::Find::prune = shift; ##-- localize prune to just this block 
--##
    #my @directory = ($fs) ;
    use constant MAX_SIZE => (25*1024*1024) ;
    use constant DIVISOR  => (1024) ;
    my ( $wanted, $list ) = find_by_min_size ( MAX_SIZE ) ;
    File::Find::find ( { wanted => $wanted, no_chdir => +shift }, $fs ) ;
    @large_files = $list->() ;


    @sorted_large_files =
        sort { -s $b <=> -s $a }
    @large_files ;

} ##-- End sub --##

    if (@sorted_large_files) {
        my %meta ;
        for my $file (@sorted_large_files) {
            $meta{$file} = {
                     'uid' => (stat($file))[4],
                     'gid' => (stat($file))[5],
                     'sz'  => (stat($file))[7],
                     'mod' => (stat($file))[9],
            } ;

        } ## END FOR ##

        for $key ( keys %meta ) {
            $user = getpwuid $meta{$key}->{'uid'} ;
            $grp  = getgrgid $meta{$key}->{'gid'} ;
            $mod  = $meta{$key}{'mod'} ;
            $sz   = $meta{$key}{'sz'} / DIVISOR / DIVISOR ;
            #print "\n$key => $user\t$grp\t\t" ;
            #date_me($mod) ;
            #printf("\t%0.3f Mb\n",$sz) ;
            write ;
        }

    } ##-- End @sorted_large_files if --##

    else {
        warn "\nNo file(s) over twenty-five Mb found in $fs\n" ;
        exit 0 ;
    }

    END {
        close ($logg) or warn "Log '$logg' failed to close $!" ;
    }






      
____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to