diff --git a/file_processing/archive_statements.pl b/file_processing/archive_statements.pl index fb703c2..0b1a959 100755 --- a/file_processing/archive_statements.pl +++ b/file_processing/archive_statements.pl @@ -5,65 +5,39 @@ use warnings; # Script to archive the financial data from the previous year use Time::Piece; use File::Basename; -use File::Find::Rule; # find all the subdirectories of a given directory -# http://search.cpan.org/~rclamp/File-Find-Rule-0.32/README -use File::Path qw(make_path remove_tree); -#use File::Copy::Recursive qw(fcopy rcopy dircopy fmove rmove dirmove); +use File::Find::Rule; use File::Copy::Recursive qw(dircopy); -use List::MoreUtils qw(uniq); use File::DirCompare; -use Data::Dumper; +use Carp qw( croak ); my $now = localtime; my $year = $now->year; -print "Year is $year\n"; +print "Current year: $year\n"; # Get year to archive from current year my $lastyear = $now->add_years(-1)->year; - -print("Last year was $lastyear\n"); +print("Last year: $lastyear\n"); # Define and create folders -my (%files1, %files2); my $financial_folder = '/home/tracey/Documents/financial/current_year/'; my $financial_archive_folder = '/home/tracey/Documents/financial/1_financial_archives/'; my $lastyear_folder = $financial_archive_folder . $lastyear . 'FinancialArchives'; my @folders = ( $financial_folder, $financial_archive_folder, $lastyear_folder ); -=begin comment -# Will be using this kind of thing to get only files with current year for deletion -foreach my $folder ( @folders ) { - if ( -d $folder ) { - print("Folder exists: $folder\n"); - } - unless( -d $folder ) { - print("Creating the folder \"$folder\"\n"); - die "Could not create directory! $!" unless make_path($folder); - } -} - -# Get current folder list for nonempty directories -my $find_rule = File::Find::Rule->new; -$find_rule->nonempty->maxdepth(1)->mindepth(1)->relative; -my @curr_subdirs = $find_rule->directory->in( $financial_folder ); -=end comment -=cut - print("Copying current directories to archive folder\n"); print("From: $financial_folder\n"); print("To: $lastyear_folder\n"); -dircopy( $financial_folder, $lastyear_folder ) or die $!; +dircopy( $financial_folder, $lastyear_folder ) or croak "Could not copy directories $!"; -# Make sure contents match -my $same = compare_dirs( $financial_folder, $lastyear_folder ); -print("The value of same is $same\n"); - -die "Error: The folders are not the same!" unless ($same == 1) ; +# Make sure contents match before we do any Deleting +# croak on errors to guard against data losss +my $same_result = compare_dirs( $financial_folder, $lastyear_folder ); +croak "Error: The folders are not the same!" unless ($same_result == 1) ; # Delete all files from current year from archive folders +# Also delete files from last year in current year folder delete_dirs( $financial_folder, $lastyear_folder, $year, $lastyear ); -# compare new directories to old directories to make sure they are the same sub compare_dirs { my ( $dir1, $dir2 ) = @_; my $same = 1; @@ -85,33 +59,22 @@ sub compare_dirs { return $same; } -# Delete old files sub delete_dirs { my ( $new_dir, $old_dir, $curr_year, $last_year ) = @_; - print("Deleting files from current year in archives\n"); - print("and files from last year from current folder\n"); - # print("New dir in the delete_dirs is $new_dir\n"); - # print("Old dir in the delete_dirs is $old_dir\n"); + print("Deleting files from current year $curr_year in archives\n"); + print("and files from last year $last_year from current folder\n"); - # For all files in archive dir that are newer than last year delete them -# my $find_rule = File::Find::Rule->new; -# # $find_rule->nonempty->maxdepth(5)->mindepth(1)->relative; -# $find_rule->name('*.' . $lastyear . '*'); -# my @curr_subdirs = $find_rule->directory->in( $new_dir ); -# print("These are the current subdirs in delete_dirs\n\n"); -# print Dumper(\@curr_subdirs); -# foreach my $subdir(@curr_subdirs) { -# print("Directory in current subdir is $subdir"); + my @this_year_files = File::Find::Rule->file() + ->name("*$curr_year*") + ->in($old_dir); + my @last_year_files = File::Find::Rule->file() + ->name("*$last_year*") + ->in($new_dir); -my @last_year_files = File::Find::Rule->file() - ->name("*$curr_year*") - ->in($old_dir); -#print("These are the current files in last year folders in delete_dirs\n\n"); -#print Dumper(\@last_year_files); -my $num_files = scalar(@last_year_files); -print("Number of current files in last year folders in delete_dirs: $num_files\n\n"); - - # For all file in current folder that are older than this year delete them + unlink @this_year_files; + print("Deleted all $curr_year files from the folder for $last_year\n"); + unlink @last_year_files; + print("Deleted all $last_year files from the folder for $curr_year\n"); return; }