shell-scripts/file_processing/archive_statements.pl

97 lines
3.3 KiB
Perl
Raw Normal View History

#!/usr/bin/perl
use strict;
use warnings;
2018-03-19 21:20:20 -05:00
# Script to archive the financial data from the previous year
use Time::Piece;
2018-03-19 21:20:20 -05:00
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::Copy::Recursive qw(dircopy);
2018-03-19 21:20:20 -05:00
use List::MoreUtils qw(uniq);
use File::DirCompare;
2018-05-20 12:07:59 -05:00
use Data::Dumper;
my $now = localtime;
my $year = $now->year;
print "Year is $year\n";
# Get year to archive from current year
my $lastyear = $now->add_years(-1)->year;
2018-03-19 21:20:20 -05:00
print("Last year was $lastyear\n");
# Define and create folders
2018-03-19 21:20:20 -05:00
my (%files1, %files2);
my $financial_folder = '/home/tracey/Documents/financial/current_year/';
my $financial_archive_folder = '/home/tracey/Documents/financial/1_financial_archives/';
2018-03-19 21:20:20 -05:00
my $lastyear_folder = $financial_archive_folder . $lastyear . 'FinancialArchives';
my @folders = ( $financial_folder, $financial_archive_folder, $lastyear_folder );
2018-03-19 21:20:20 -05:00
=begin comment
# Will be using this kind of thing to get only files with current year for deletion
foreach my $folder ( @folders ) {
2018-03-19 21:20:20 -05:00
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 );
2018-03-19 21:20:20 -05:00
=end comment
=cut
2018-03-19 21:20:20 -05:00
print("Copying current directories to archive folder\n");
print("From: $financial_folder\n");
print("To: $lastyear_folder\n");
2018-05-20 12:07:59 -05:00
dircopy( $financial_folder, $lastyear_folder ) or die $!;
2018-03-19 21:20:20 -05:00
# Make sure contents match
compare_dirs( $financial_folder, $lastyear_folder );
2018-03-19 21:20:20 -05:00
# Delete all files from current year from archive folders
2018-05-20 12:07:59 -05:00
delete_dirs( $financial_folder, $lastyear_folder, $year, $lastyear );
2018-03-19 21:20:20 -05:00
# compare new directories to old directories to make sure they are the same
sub compare_dirs {
my ( $dir1, $dir2 ) = @_;
print("Making sure the copy was complete and all files match\n");
2018-03-19 21:20:20 -05:00
File::DirCompare->compare($dir1, $dir2, sub {
my ($a, $b) = @_;
if (! $b) {
printf "Only in %s: %s\n", dirname($a), basename($a);
} elsif (! $a) {
printf "Only in %s: %s\n", dirname($b), basename($b);
} else {
print "Files $a and $b differ\n";
}
});
}
# Delete old files
sub delete_dirs {
my ( $new_dir, $old_dir, $curr_year, $last_year ) = @_;
2018-05-20 12:07:59 -05:00
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");
# 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(1)->mindepth(1)->relative;
$find_rule->name('*.' . $lastyear . '*');
my @curr_subdirs = $find_rule->directory->in( $new_dir );
2018-05-20 12:07:59 -05:00
print("This is the current subdirs in delete_dirs\n\n");
print Dumper(\@curr_subdirs);
foreach my $subdir(@curr_subdirs) {
print("Directory in current subdir is $subdir");
}
# For all file in current folder that are older than this year delete them
}