in reply to Re: Manage Directory Structure
in thread Manage Directory Structure
#!/usr/local/bin/perl -w use Date; use File::Find; use Data::Dumper; my $d = Date->new(); my $today=$d->yyyymmdd; my $yesterday=$d->yesterday; my $progname = `basename $0`; chomp($progname); my $main = "/home/users/user"; my $out = "/home/users/user/tmp/$progname_$today.dat"; my $comp = "/home/users/user/tmp/$progname_$yesterday.dat"; my $final = "/home/users/user/tmp/$progname_compare.dat"; my $skip = qw/skip1|skip2|skip3/; my $max_size_diff = "25"; my $max_file_diff = "0"; ## Main ## open (OUT, ">$out"); find ({wanted => \&data_for_path, follow=>1, follow_skip=>2}, call_dir +($p=1), call_dir($p=2), call_dir($p=3)); close OUT; process(); ## Builds the directory structure by using File::Find to recurse into +each subdir## sub data_for_path { $size_d = 0; if ($File::Find::name =~ /$skip/){return;} if (-d $File::Find::name){ $directory = $File::Find::name; print OUT "$directory\tDirectory\tNULL\tNULL\tNULL\n"; } if (-f $File::Find::name){ my $file = $File::Find::name; my $size_f = -s $file; $size_d += -s $file; print OUT "$file\tFile\t$size_f\tNULL\t0\n"; } if (-l $File::Find::name){ my $name = $File::Find::name; my $link = readlink $name; my $size_l = -s $link; print OUT "$name\tLink\t$size_l\t$link\t0\n"; } } ## Calls wich directory path to use from the main ## sub call_dir{ if ($p == 1){ $sub_dir = "$main/tmp/"; } elsif ($p == 2){ # $sub_dir = "$main/data"; } elsif ($p == 3){ $sub_dir = "$main/exe"; } } ## Processes flat files ## sub process { open (TODAY_IN, $out); foreach my $line_t (<TODAY_IN>){ ($path, $type, $size, $link, $nfiles) = split(/\s+/, $line_t); $today{$path}{'Type'} = $type; $today{$path}{'Size'} = $size; $today{$path}{'Link'} = $link; $today{$path}{'NFILES'} = $nfiles; } close TODAY_IN; open (YESTERDAY_IN, $comp); foreach my $line_y (<YESTERDAY_IN>){ ($path, $type, $size, $link, $nfiles) = split(/\s+/, $line_y); $yesterday{$path}{'Type'} = $type; $yesterday{$path}{'Size'} = $size; $yesterday{$path}{'Link'} = $link; $yesterday{$path}{'NFILES'} = $nfiles; } close YESTERDAY_IN; # print Dumper %today; # print Dumper %yesterday; diff(%today, %yesterday); print Dumper %diffOut; } ## Diffs todays directory structure to yesterdays structure ## sub diff { open (COMP, ">$final"); foreach $key (keys %today){ if (exists $yesterday{$key}){ $size_t = $today{$key}{'Size'}; $size_y = $yesterday{$key}{'Size'}; $nfiles_t = $today{$key}{'NFILES'}; $nfiles_y = $yesterday{$key}{'NFILES'}; if ($size_y > 0 && $size_t > 0){ if ($size_t > $size_y){ my $diff_t = (1-($size_y/$size_t))*100; if ($diff_t >= $max_size_diff){ $diffOut{$key}{'SizeYest'} = $size_y; $diffOut{$key}{'SizeToday'} = $size_t; $diffOut{$key}{'SizeDiff'} = $diff_t; print COMP "$key\tYEST:$diffOut{$key}{'SizeYest'}\tT +OD:$diffOut{$key}{'SizeToday'}\tDIFF:$diffOut{$key}{'SizeDiff'}\n"; } } elsif ($size_y > $size_t){ my $diff_y = (1-($size_t/$size_y))*100; if ($diff_y >= $max_size_diff){ $diffOut{$key}{'SizeToday'} = $size_t; $diffOut{$key}{'SizeYest'} = $size_y; $diffOut{$key}{'SizeDiff'} = $diff_y; print COMP "$key\tYEST:$diffOut{$key}{'SizeYest'}\tT +OD:$diffOut{$key}{'SizeToday'}\tDIFF:$diffOut{$key}{'SizeDiff'}\n"; } } if (-d $key){ if ($nfiles_y > 0 && $nfiles_t > 0){ $diffFiles = $nfiles_t-$nfiles_y; if ($diffFiles > $max_file_diff){ $diffOut{$key}{'FileDiff'} = $diffFiles; print COMP "$key\tFDIFF:$diffOut{$key}{'FileDiff' +}\n"; } } } } } else { $diffOut{$key}{'SizeToday'} = $size_t; $diffOut{$key}{'SizeYest'} = 0; $diffOut{$key}{'SizeDiff'} = "New"; print COMP "$key\tYEST:$diffOut{$key}{'SizeYest'}\tTOD:$diffO +ut{$key}{'SizeToday'}\tDIFF:$diffOut{$key}{'SizeDiff'}\n"; } } close COMP; print "Done!\n"; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Manage Directory Structure
by GrandFather (Saint) on Jul 04, 2009 at 04:36 UTC | |
|
Re^3: Manage Directory Structure
by graff (Chancellor) on Jul 04, 2009 at 14:32 UTC | |
by boardryder (Novice) on Jul 05, 2009 at 04:34 UTC | |
by graff (Chancellor) on Jul 05, 2009 at 14:38 UTC | |
by boardryder (Novice) on Jul 26, 2009 at 05:18 UTC |