use warnings; use strict; use File::Basename; use File::Copy; my $dir = 'ParticleAcquisitionDataImages/'; # or whatever my @files = glob "${dir}*.jpg"; my $rename_index = 1; for my $file ( sort @files ){ next if -d $file; my($filename, $directory, $suffix) = fileparse($file, '.jpg'); next unless -e "${dir}$filename.xml"; $filename = changename($filename); open my $fh, '<', "${dir}$filename.xml" or die "$!"; seek($fh, 498, 0); my $newdir; read($fh, $newdir, 3); close $fh; substr $newdir, 1, 1, ''; mkdir "$dir$newdir" unless -e "$dir$newdir"; for my $ext ( qw/.jpg .xml/) { move "$dir$filename$ext", "$dir$newdir/$filename$ext" or die $!; } } sub changename { my $filename = shift; for my $suffix ( qw/.jpg .xml/) { rename "$dir$filename$suffix", "$dir$rename_index$suffix" or die $!; } return $rename_index++; }