use strict; use warnings; use File::Copy qw(move); my $input_dir = ...; my $output_dir = ...; opendir(my $dh, $input_dir) or die "Can't open dir $input_dir: $!"; my @mp3 = grep { /\.mp3/ } readdir($dh); closedir $dh or die "Can't close dir $input_dir: $!"; foreach my $fn_old (@mp3) { my $fn_new = $fn_old; # filtere den neuen Filenamen $fn_new =~ tr/a-zA-Z.0-9/_/cs; $fn_new =~ s/_\././g; # verschiebe die Datei move("$input_dir/$fn_old","$output_dir/$fn_new") or die "move of '$fn_old' failed: $!"; }