----- 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/