my(@filenames, $directory); opendir($directory, $directory_path) or die "opendir of $directory_path failed: $!\n"; @filenames = grep /\A\d+\.jpg\z/, readdir($directory); closedir($directory); #### use File::Spec; -d $subdir_path or mkdir($subdir_path, 0777) or die "mkdir of $subdir_path failed: $!\n"; rename($filename, File::Spec->catfile($subdir_path, $filename)) or die "rename of $filename failed: $!\n"; #### use File::Spec; for my $directory_path (@ARGV) { my $directory; my @filenames; # Determine @filenames to work with in $directory_path. opendir($directory, $directory_path) or die "opendir of $directory_path failed: $!\n"; @filenames = grep /\A\d+\.jpg\z/, readdir($directory); closedir($directory); for (@filenames) { my($basename, $prefix) = /\A((.+).{3})\.jpg\z/s or next; my $subdir_path = File::Spec->catdir($directory_path, $prefix); # Create the subdir if it does not yet exist. -d $subdir_path or mkdir($subdir_path, 0777) or die "mkdir of $subdir_path failed: $!\n"; my $old_path = File::Spec->catfile($directory_path, $_); my $new_path = File::Spec->catfile($subdir_path, sprintf("%06d.jpg", $basename)); # Move the file to the subdir. rename($old_path, $new_path) or die "rename of $old_path to $new_path failed: $!\n"; } }