package ProcessDirectories; use Modern::Perl; # VERSION # AUTHORITY # ABSTRACT: Get current subdirectories in current year directory and copy to archive directory use Carp qw( croak ); use File::Basename; use File::Find::Rule; use File::Copy::Recursive qw(dircopy); use File::DirCompare; use Pod::Usage; # use Time::Piece qw/localtime/; sub create_archive_dirs { my ( $source_dir, $dest_dir ) = @_; unless ( -d $source_dir ) { die "Source directory '$source_dir' does not exist, please create it"; } print("Copying current directories to archive folder\n"); print("From: $source_dir\n"); print("To: $dest_dir\n"); dircopy( $source_dir, $dest_dir ) or croak "Could not copy directories $!"; return; } sub compare_dirs { my ( $dir1, $dir2 ) = @_; my $same = 1; print("Making sure all directories and files match between source and destination\n"); File::DirCompare->compare( $dir1, $dir2, sub { my ( $a, $b ) = @_; if ( !$b ) { printf "Only in %s: %s\n", dirname($a), basename($a); $same = 0; } elsif ( !$a ) { printf "Only in %s: %s\n", dirname($b), basename($b); $same = 0; } else { print "Files $a and $b differ\n"; $same = 0; } } ); return $same; } sub clean_dirs { my ( $new_dir, $old_dir, $curr_year, $last_year ) = @_; 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); unlink @this_year_files; print("Deleted all files for $curr_year from the folder for $last_year\n"); unlink @last_year_files; print("Deleted all files for $last_year from the folder for $curr_year\n"); return; } 1; =pod =head1 NAME ProcessDirectories =head1 DESCRIPTION Methods for copying and processing a directory of files for the past year and this year =head1 SYNOPSIS use ProcessDirectories create_archive_dirs ( $source_dir, $dest_dir ); compare_dirs( $source_dir, $dest_dir ); clean_dirs( $source_dir, $dest_dir, $year, $lastyear ); =head1 METHODS =head2 C: Copies the directory structure and contents of a source file to the archive / destination directory. =head3 Usage: create_archive_dirs( $source_dir, $destination_dir ); =head2 C: Compares the content of two specified directories. Provides feedback on the results. Returns 1 if the source and destination match, 0 otherwise. =head3 Usage: compare_dirs( $source_dir, $destination_dir ); =head2 C: This method accepts the following parameters: =over 4 =item source_dir =item destination_dir =item this_year =item last_year =back =head3 Usage: clean_dirs( $source_dir, $destination_dir, 2023, 2022 ); =cut