Convertire Tutti I Nomi Delle Cartelle E Dei Files In ASCII Puro

Ci sono molti programmi che non digeriscono caratteri al di fuori dell'ASCII, per questo motivo c'e' il seguente script per convertire tutti i file e le cartelle in maniera ricorsiva con caratteri ASCII (si poteva fare anche lungo la meta'):

 #!/usr/bin/rebol
 ascii: "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM-_./"
 ascii2: charset ascii
 funz_ascii: func [ /local lista a ] [
	lista: read %. 
	foreach nomefile lista [
		if not (parse to-string nomefile  [any ascii2] ) [
			a: copy to-string nomefile
			foreach char unique trim/with copy a ascii [ replace/all a char "_"  ]
			funz_testname a
			]
		]	
	]
 funz_testname: func [name /local b] [
   b: copy name
   either exists? to-file b [ 
       view layout [
          text "The following file already exists:"
          text b
          text "please rename it:"
          newname: field 
          button "OK" [ unview]
          ] 
       funz_testname newname/text
       ] [ rename nomefile to-file b]
 ]
 ;here we go
 funz_ascii

Oppure:

 #! /usr/bin/perl
 use File::Find;
 use Text::Unidecode;
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             $_ = unidecode $_ ; # let's unidecode!
             rename $old, $_ ;
             }, ".";

Io poi consiglio anche il seguente:

 #! /usr/bin/perl
 use File::Find;
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/ /_/ or return; # don't do anything if you don't have spaces
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/&/e/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/à/a/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/è/e/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/é/e/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/ò/o/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/ù/u/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/ì/i/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/,/_/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/[/_/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/]/_/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/\(/_/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/\)/_/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, "."; # starting directory
 finddepth sub { # finddepth so directories are done AFTER their contents
              my $old = $_;
             tr/'/_/ or return; # don't do anything if you don't have &
             -e and return; # don't rename over an existing file!
             rename $old, $_ or warn "cannot rename $old to $_: $!";
             }, ".";