Perl – How to Perl script to move files with specific extension from one folder to another and rename the moved files

csvperlperl-module

I have 2 folders DIR1 DIR2 ,i need to move only files with extension ".csv" only from dir1 to dir2

and rename these file copied files with the timestamp in dir2

$dirname = "\\dir1\\"
$dirname2= "\\dir2\\";
$filterstring=".csv";
opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
foreach my $filename (readdir(DIR))
{
      if ($filename =~ m/$filterstring/) {                          
$cfile=$dirname.$filename;
print "\n moving $cfile from $dirname  to $dirname2 \n";
move($cfile,$dirname2);                             
           }}
closedir(DIR);

This above code i dveloped moves files with extension ".csv " and also files with filename "abc_csv_uv.txt"
how do i rectify this problem and then rename the moved files…please advise..need help

Best Answer

use strict;
use File::Copy;
use File::stat;
use POSIX qw(strftime);

my $dirname = "\\dir1\\";
my $dirname2 = "\\dir2\\";
my $filterstring = "\\.csv\$";

opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";
foreach my $filename (readdir(DIR)) {
    next if not $filename =~ m/$filterstring/;

    my $old_file = $dirname . $filename;
    my $new_file = $dirname2 . $filename . '.' . strftime("%Y%m%dT%H%M%S", localtime(stat($old_file)->mtime));

    print "Moving $old_file to $new_file\n";
    move($old_file, $new_file);
}
closedir(DIR);

1;
Related Topic