-1

I am using the below script to rename but it is renaming the all file end with STA.I need to rename the file that starts with KRAT or TRAT.

#!/usr/local/bin/perl 
use strict; 
use warnings; 
use File::Copy; 

my $directory = 'C:\Users\Desktop'; 

chdir($directory) or die "Can't chdir to $directory $!"; 
opendir(DIR, $directory) || die "Couldn't opendir: $!\n"; 

my @files = grep { $_ ne '.' && $_ ne '..' } readdir DIR; 

foreach(@files) { 
    print $_,"\n"; 
    my $newName = $_; 

    $newName =~ s/STA$/t00/g; 
    print "RENAMING: $_ -> $newName \n"; 

    rename($_, $newName); 

}
kunal
  • 3
  • 2
  • I used below code #!/usr/local/bin/perl use strict; use warnings; use File::Copy; my $directory = 'C:\Users\rajkunal_aps\Desktop'; chdir($directory) or die "Can't chdir to $directory $!"; opendir(DIR, $directory) || die "Couldn't opendir: $!\n"; my @files = grep { $_ ne '.' && $_ ne '..' } readdir DIR; foreach(@files) { print $_,"\n"; my $newName = $_; $newName =~ s/STA$/t00/g; print "RENAMING: $_ -> $newName \n"; rename($_, $newName); } – kunal Sep 12 '17 at 05:34
  • 1
    You forgot to ask a question! – ikegami Sep 12 '17 at 05:43
  • 2
    It looks like you've picked up someone else's script and posted it here to get it modified to your requirement. That isn't how programming works. You should at least make some effort of your own before getting the rest of the world to do your job for you. – Borodin Sep 12 '17 at 11:06

1 Answers1

-1

Change the line

$newName =~ s/STA$/t00/g;

to

$newName =~ s/^KRAT|^TRAT/t00/;

or more succint.

#!/usr/local/bin/perl
use strict;
use warnings;

my $directory = '<DIR>';

chdir($directory) or die "Can't chdir to $directory $!";
opendir(DIR, $directory) || die "Couldn't opendir: $!\n";

rename_file($_) for grep { $_ ne '.' && $_ ne '..' && /^KRAT|^TRAT/} readdir DIR

closedir(DIR);

sub rename_file {
    my $name = shift;
    $name =~ s/^KRAT|^TRAT/t00/;
    rename($_, $name);
}
Arunesh Singh
  • 3,489
  • 18
  • 26