1) File::Find::find ( { wanted => $wanted, prune => $File::Find::prune }, $fs ) ; 2) File::Find::find ( { wanted => $wanted, prune => +shift }, $fs ) ; 3) File::Find::find ( { wanted => $wanted, prune => $File::Find::prune = 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, prune => $File::Find::prune }, $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 $!" ; }