E-Books umbenennen
Die Dateien meiner E-Book-Sammlung sind uneinheitlich benannt: Einige heißen „Nachname, Vorname – Titel“, andere „Vorname Nachname – Titel“. Ich würde das gern vereinheitlichen, sodass bei allen Autoren der Vorname vorn steht.
- Dr. Harald Bögeholz
Die Dateien meiner E-Book-Sammlung sind uneinheitlich benannt: Einige heißen „Nachname, Vorname – Titel“, andere „Vorname Nachname – Titel“. Ich würde das gern vereinheitlichen, sodass bei allen Autoren der Vorname vorn steht.
Dafür ist Perl mit seinen vielseitigen regulären Ausdrücken wie geschaffen. Das folgende Skript benennt alle Dateien im aktuellen Verzeichnis wie gewünscht um:
opendir(DIR, ".") or die;
while (my $oldname = readdir(DIR))
{
my $newname = $oldname;
if ($newname =~ s/^(.*?),\s*(.*?)\s* - /$2 $1 - /)
{
print "$oldname -> $newname\n";
if (-e $newname)
{
print "WARNUNG: Neuer Name existiert.\n";
}
else
{
rename $oldname, $newname or die;
}
}
}
Windows-Anwender müssen dafür zunächst Perl installieren. Sie finden es wie das Skript über den folgenden Link zum Download.
Ein paar Worte zur Funktionsweise der zentralen, unleserlichen Zeile: In Perl bedeutet eine Anweisung der Form s/x/y/ suche x und ersetze es durch y. Für x steht in diesem Fall ein regulärer Ausdruck, der bedeutet: Am Zeilenanfang ^ irgendwas (.*?), ein Komma, optionaler Leerraum \s*, noch irgendwas (.*?), optionaler Leerraum \s*, Leerzeichen, Bindestrich, Leerzeichen. Die Klammern um die beiden Ausdrücke für „irgendwas“ sorgen dafür, dass Perl sich merkt, worauf „irgendwas“ gepasst hat, in diesem Fall den Nachnamen und den Vornamen. Beim Ersetzen kann man diese Strings als $1 und $2 wieder verwenden, und zwar in umgekehrter Reihenfolge, damit anschließend „Vorname Nachname“ dasteht.
Wenn der reguläre Ausdruck auf einen Dateinamen nicht passt, rührt das Skript ihn nicht an. Das ist zum Beispiel der Fall, wenn zwischen Vor- und Nachname kein Komma steht – dann ist der Dateiname ja schon korrekt. Zudem wird es sich auch nicht selbst umbenennen, wenn man es der Einfachheit halber in das Verzeichnis kopiert, in dem es arbeiten soll.