use File::Find; finddepth { wanted => sub { return if /^\./; my $new = lc $_; return if $new eq $_ or -e $new; rename $_, $new or warn "Cannot rename $File::Find::name to $File::Find::dir/$new: $!"; }, follow => 1, }, $ARGV[0] || ".";