#!/usr/bin/perl use strict; use warnings; use File::Find; use File::Copy; # # Set this to 0 to turn off printing which files it's moving. # my $verbose = 1; my @dirs = qw( Folder_1 Folder_2 Folder_3 Folder_4 ); my %num; sub wanted { if ( -f $_ ) { my $dir = $File::Find::dir; $num{$dir}++; my $src = "$dir/$_"; my $target = "${dir}_$num{$dir}.jpg"; my $mv_msg = "move '$src' to '$dir/$target'"; if ( -f $target ) { die "Can't $mv_msg: File already exists!\n" } else { move( $_, $target ) || die "Can't $mv_msg: $!\n"; print "$mv_msg OK\n" if ($verbose); } } } File::Find::find( { wanted => \&wanted }, @dirs );