Artikel im Internet unter http://www.hidemail.de/blog/rename-perl.shtml.
Samstag, 14.4.2007, 00:00:23 Uhr

rename - Dateien und Verzeichnis umbenennen


Mit dem Befehl rename können Sie Dateien und Verzeichnisse umbenennen.
Der Syntax von rename lautet
rename (Altername, Neuername);

Altername gibt die Datei oder das Verzeichnis an, das geändert werden soll, Neuername ist der neue Verzeichnis- bzw. Dateiname.
Vorsicht
Wenn der erste Parameter eine Datei ist und der zweite Parameter der Name eines anderen Verzeichnisses, wird die Datei in das andere Verzeichnis verschoben.
Es ist jedoch mit dieser Funktion nicht möglich, als ersten und zweiten Parameter zwei unterschiedliche Verzeichnisse anzugeben, um das erste Verzeichnis in das zweite zu verschieben.

Als Rückgabewert gibt es ein true, wenn alles geklappt hat, ein false, wenn ein Fehler aufgetreten ist.

Ein Beispiel, alle .htm-Dateien des Verzeichnisses test in .html umbenennen:

#!/usr/bin/perl

use strict;
my @dateien=();

opendir (DIR,'test') || die "Kann Verzeichnis nicht oeffnen";

while ( my $ak=readdir(DIR) ){
push (@dateien,$ak) if ( !-d $ak && $ak=~ /\.htm$/i ); # wenn Eintrag kein Verzeichnis und Endung = .htm, dann Eintrag in @dateien schreiben
}
closedir (DIR);

chdir 'test';

foreach (@dateien){
my $orig=$_;
$_=~ s/\.htm$/\.html/i; # Endung .htm in .html ändern
rename ($orig,$_) || die "Kann Datei $orig nicht umbenennen";
print "Benenne $orig um in $_\n";

}
print "OK";


Das Script liest zu erst alle Dateien mit der Endung .htm (Gross-Kleinschreibung egal) aus dem Verzeichnis test in das Array @dateien ein. Danach wird das Verzeichnis test als aktuelles Verzeichnis gesetzt,
und das Array @dateien wird Element für Element durchgegangen. Der originale Dateiname wird in $orig gemerkt, danach wird die Endung des aktuellen Elementes von .htm in .html geändert. Schließlich wird die Datei umbenannt.

Übrigens
...auch wenn das gerade hier nicht hin gehört:
Nach der erfolgreichen Umbenennung aller Dateien steht in @dateien die aktualisierte Fassung der einzelnen Dateien. Warum? Nun, $_ ändert in der foreach-Schleife automatisch den Originaleintrag in @dateien. Vorsicht also, falls man die Originaldateinamen nochmal braucht!
Im vorliegenden Fall ist dies aber eher ein Vorteil, da ja @dateien jetzt dem aktuellen Zustand entspricht.


Artikel im Internet unter http://www.hidemail.de/blog/rename-perl.shtml.