The following files were not copied over properly: report1 sitea siteb report2 sitea siteb sitea siteb report3 sitea siteb sitea siteb sitea siteb #### The following files were not copied over properly: report1 sitea siteb report2 sitea siteb report3 sitea siteb #### #!/usr/bin/perl -w use strict; use Time::Local; sub _init { my $config_dir = '/config/dir'; my $config_file = 'report_copy.cfg'; my $site_file = 'sites.cfg'; my $report_dir = '/report/dir'; my ($day, $month, $year) = (localtime)[3,4,5]; my $log_date = sprintf("%04d%02d%02d", $year + 1900, $month + 1, $day); return $config_dir, $config_file, $site_file, $report_dir, $day, $log_date; } sub _read_cfg { my ($config_dir, $config_file, $site_file) = @_; my (%reports, %sites); open IN, "$config_dir/$config_file" or die "Error: Could not open $config_dir/$config_file for reading: $!\n"; while () { chomp; my ($name, $type, $day, $site_locations) = split; $reports{$name} = "$type:$day:$site_locations"; } close IN or warn "Error: Could not close $config_dir/$config_file: $!\n"; open IN, "$config_dir/$site_file" or die "Error: Could not open $config_dir/$site_file for reading: $!\n"; while () { chomp; my ($site, $folder) = split /=/; $sites{$site} = $folder; } close IN or warn "Error: Could not close $config_dir/$site_file: $!\n"; return \(%reports, %sites); } sub _get_reports { my ($report_dir, $day, $log_date, $reports, $sites) = @_; my (@site_array, %missed_reports); for (sort keys %$reports) { my ($type, $report_day, $site_locations) = split /:/, $reports->{$_}; if ($site_locations eq 'All') { for my $site (sort keys %$sites) { push @site_array, $site; } } else { @site_array = split /,/, $site_locations; } if ($type eq 'daily') { _copy_report($_, $report_dir, $log_date, $sites, \@site_array); } elsif ($type eq 'monthly' && $report_day eq $day) { _copy_report($_, $report_dir, $log_date, $sites, \@site_array); } else { delete $reports->{$_}; } my $file_check; my $problem = ""; for my $site_folder (@site_array) { $file_check = 0; my $folder = $sites->{$site_folder}; for my $filename () { $file_check = 1 if $filename =~ /$_.*\.$log_date/; } if ($file_check == 1) { next; } else { $problem .= "$site_folder "; $missed_reports{$_} = $problem; } } delete $reports->{$_}; } return \%missed_reports; } sub _copy_report { my ($report_name, $report_dir, $log_date, $sites, $site_array) = @_; for my $site (@$site_array) { my $result = `scp host.$site:$report_dir/${report_name}*.$log_date /disk2/$sites->{$site}/reports`; } } sub _print_report { my ($missed_reports, $log_date) = @_; open OUT, ">> /disk2/reports/report_copy.$log_date" or die "Error: Could not open /disk2/reports/report_copy.$log_date: $!\n"; print OUT "The following files were not copied over properly:\n\n"; for (sort keys %$missed_reports) { print OUT "$_\t$missed_reports->{$_}\n"; } close OUT or warn "Error: Could not close /disk2/reports/report_copy.$log_date: $!\n"; } my ($config_dir, $config_file, $site_file, $report_dir, $day, $log_date) = _init; my ($reports, $sites) = _read_cfg($config_dir, $config_file, $site_file); my $missed_reports = _get_reports($report_dir, $day, $log_date, $reports, $sites); _print_report($missed_reports, $log_date);