You are really helpful... thanks for all the info.
here is my latest code... now l'll take a few minutes to digest your
suggestions.
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use File::Find;
finddepth(\&fixnames, ".");
sub fixnames
{
# do not rename dotfiles
return if /^\./;
# do not rename this system directory
return if /lost\+found/;
# preserve original name
my $old = $_ ;
# preserve new name, and lowercase it at the same time
my $new = lc $old ;
# translate all characters to _ except 'a-z 0-9 . _'
$new =~ tr/a-z0-9._/_/c;
# remove all leading _'s
$new =~ s/^_+//;
# fix odd extensions
$new =~ s/\.mpeg$/\.mpg/;
$new =~ s/\.ram$/\.rm/;
$new =~ s/\.qt$/\.mov/;
$new =~ s/\.jpeg$/\.jpg/;
# replace _. with .
$new =~ s/_\./\./g;
# replace ._ with _
$new =~ s/\._/_/g;
# squeeze repeated _'s
$new =~ tr/__//s;
# squeeze repeated .'s
$new =~ tr/..//s;
# abort if filname has not changed
return if $new eq $old;
# abort if new name already exists (i would like to change
increment the file and try again somehow)
return if (-e $new);
# I wonder if I should do something like --> rename($was, $_)
unless $was eq $old;
rename($old, $new) or warn "Cannot rename $old:$!\n";
# show the files that we are renaming
print "renaming \n $File::Find::name ---> \n $File::Find::dir/$new\n";