venrii has asked for the wisdom of the Perl Monks concerning the following question:
use strict; use File::Find; use Fcntl ':mode'; my $cur_dir; my %stats; my ($files, $dirs, $links, $tfiles, $tdirs, $tlinks); my ($mode, $user, $group); my $depth = split('/', $ARGV[0]) + $ARGV[1]; find ( \&user_files, $ARGV[0]); print "Files: $tfiles\n"; print "Dirs: $tdirs\n"; print "Links: $tlinks\n"; printf "%-40s %-10s %-10s %-10s\n", 'Directory', 'Dirs', 'Files', 'Lin +ks'; print '-' x 70, "\n"; for ( sort keys %stats ) { $stats{$_}{dirs}-- if ( $_ eq $ARGV[0] ); my $tdirs = int($stats{$_}{tdirs}); my $tfiles = int($stats{$_}{tfiles}); my $tlinks = int($stats{$_}{tlinks}); my $dirs = int($stats{$_}{dirs}); my $files = int($stats{$_}{files}); my $links = int($stats{$_}{links}); printf "%-40s %-10s %-10s %-10s\n", $_, "$tdirs/$dirs", "$tfiles/$f +iles", "$tlinks/$lin ks"; } exit(0); #------------------------------ Sub-routines ------------------------- +--------- sub user_files { if ( $File::Find::name =~ /\/\.snapshot/ ) { $File::Find::prune = 1; return; } ($mode, $user, $group) = (stat($File::Find::name))[2,4,5]; $cur_dir = ''; my $count = 0; for my $d ( split('/', $File::Find::dir) ) { $count++; next if ( $d eq '' ); $cur_dir .= "/$d"; last if ( $count == $depth ); } if ( -f $File::Find::name ) { $tfiles++; $stats{$cur_dir}{tfiles}++; $stats{$cur_dir}{files}++ if ( $mode & S_IXOTH ); } elsif ( -d $File::Find::name ) { $tdirs++; $stats{$cur_dir}{tdirs}++; $stats{$cur_dir}{dirs}++ if ( $mode & S_IXOTH ); } elsif ( -l $File::Find::name ) { $tlinks++; $stats{$cur_dir}{tlinks}++; $stats{$cur_dir}{links}++ if ( $mode & S_IXOTH ); } }
I hope that makes more sense...Thanks for the comments so far...they are giving me ideas on how to approach the new requirements differently.Directory Dirs Files Links /path/to/dir1 10/8 12/10 0/0 /path/to/dir1/sub1 7/7 5/3 0/0 /path/to/dir1/sub1/a1 20/20 50/30 0/0 to this format Directory Dirs Files Links /path/to/dir1 37/35 67/43 0/0 /path/to/dir1/sub1 27/27 55/33 0/0 /path/to/dir1/sub1/a1 20/20 50/30 0/0
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Hash problem (possible recursion)
by ikegami (Patriarch) on Jun 14, 2006 at 21:41 UTC | |
|
Re: Hash problem (possible recursion)
by graff (Chancellor) on Jun 15, 2006 at 03:38 UTC | |
|
Re: Hash problem (possible recursion)
by GrandFather (Saint) on Jun 14, 2006 at 21:58 UTC |