#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd pp /; use File::Basename qw/ fileparse /; use File::Copy qw/ move /; # RENAME Main( @ARGV ); exit( 0 ); sub Main { my @files = qw' err/error.txt GridSquare_0000000077_FoilHole_0000000001_Data_0000000002_20120315_103721.jpg GridSquare_0000000077_FoilHole_0000000001_Data_0000000002_20120315_103721.xml blah_foo.jpg blah_bar.xml blah/foo.jpg blah/bar.xml '; my @rename = makeRenameList( @files ); fakeRename( @rename ); } sub fakeRename { print "\n"; for my $name ( @_ ){ print "rename ", pp( $name ), "\n\n"; } } sub makeRenameList { my @fromTo; my %rename_index = ( qw/ .jpg 1 .xml 1 / ); LOOP_FROMFILE: for my $fromFile ( @_ ){ my($directory, $filename, $suffix) = $fromFile =~ m{^(.*?)(?:([^/]*?)(\.[^\.]*))?$}; if( not exists $rename_index{lc $suffix} ){ warn "Unknown suffix ($suffix) ignoring($fromFile)"; next LOOP_FROMFILE; } my $toFile = join '', $directory, $rename_index{lc $suffix}++, $suffix; push @fromTo, [ $fromFile, $toFile ]; } return @fromTo; } __END__