#!/usr/bin/perl use warnings; use strict; use File::Rename qw(rename); use File::Find; our $VERSION = '0.1.4'; ### NAME NORMALIZER ### $|++; my (@dirs, @torename) = (); my $DIR = shift @ARGV; opendir(TOCLEAN, "$DIR") or die $!; @dirs = map { $_ = $DIR . $_ } sort readdir(TOCLEAN); find(\&cleanup, @dirs); if(@torename > 0){ print "Renaming files now..\n"; sleep 1; rename @torename, sub { s/[^a-zA-Z0-9_\-\/\.~]/_/g }, 1; } else{ print "No files found to rename.. Exiting\n" } sub cleanup{ return if !stat; my $name = $File::Find::name; my $dir = $File::Find::dir; next if ($name eq '.' or $name eq '..'); if($name !~ /\/\.\.?\//){ if(/[^a-zA-Z0-9_\-\/\.~]/){ print "Found: $name\n"; push(@torename, "$name"); } } }