kleiner Lösungsansatz, ist ein altes Script von einem ehemaligen Kollegen, der sich der Problematik in unserem heterogenen Netz angenommen hatte.... Problem derzeit mac9 files -> netatalk -> samba share ;-(
gruss Kai
#!/usr/bin/perl -w
# Einbindung benoetigter Module
use File::Find;
use Cwd;
use Getopt::Long;
# Ersetzungstabelle (Beispiel!)
%Ersetzungstabelle =
(
":2f" => "_",
":80" => "Ae",
":85" => "Oe",
":86" => "Ue",
":87" => "a",
":8a" => "ae",
":8d" => "c",
":9a" => "oe",
":9f" => "ue",
":a7" => "ss",
":aa" => "_",
":c4" => "_",
":c9" => "_",
"\\r" => "",
"," => "",
"\\. " => "_",
"\\.=" => "",
"\"" => ""
);
# Alle Dateien und Unterverzeichnisse, die im aktuellen
# Arbeitsverzeichnis oder ggf. in einem als Kommandozeilenargument
# bergebenen Verzeichnis zu finden sind, werden umbenannt. Achtung:
# Wenn das angegebene Verzeichnis nicht existiert, wird ebenfalls das
# aktuelle Arbeitsverzeichnis bearbeitet!
#
# Beispiel-Programmaufruf:
#
# mac-dateinamen.pl /dir/
# Wird als 1. Kommandozeilenargument '--test' angegeben, wird nur auf
# die Standard-Fehlerausgabe geschrieben, welche Dateien wie umbenannt
# werden wrden. Mit
#
# mac-dateinamen.pl --test verzeichnisname 2> konvert_test.txt
#
# kann diese Ausgabe in eine Datei umgeleitet werden.
GetOptions ("test" => \$test); # nachsehen, ob "--test" gesetzt
$dir = cwd(); # aktuelles Arbeitsverzeichnis
# existiert das ggf. angegebene Verzeichnis?
$dir = ($ARGV[0] && -e $ARGV[0] && -d _ ) ? $ARGV[0] : $dir;
chdir ($dir); # wechseln in zu bearbeitendes Verzeichnis
$dir = cwd(); # neues Arbeitsverzeichnis (absoluter Pfad!)
# Dateien/Verzeichnisse suchen
find (\&wanted, $dir);
# auf jede gefundene Datei wird die Funktion 'wanted()' ausgefhrt,
# die die Ersetzung vornimmt
sub wanted {
$fn = substr ($File::Find::name, length($dir));
print STDERR "Bearbeite $dir$fn:\n" if $test;
# und jedes Element in '%Ersetzungstabelle' ...
while (($alt, $neu) = each %Ersetzungstabelle) {
# ... Ersetzung im aktuellen Datei-/Verzeichnisnamen vornehmen
$fn =~ s/$alt/$Ersetzungstabelle{$alt}/g;
$fn =~ s/ /_/g;
}
print STDERR " $File::Find::name ->\n $dir$fn\n" if $test;
# nur, wenn Kommandozeilenargument "--test" *nicht* angegeben
# worden ist, Ersetzung vornehmen:
rename ($File::Find::name, $dir . $fn) unless $test;
}
#theend
------