aus LugUM, der freien Wissensdatenbank
#!/usr/bin/perl
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# + +
# + Perlskript zum Veraendern des Bildnamens +
# + welcher auf einer FotoCD angegeben ist, hin +
# + zu einem Dateinamen im abgefragten Schema +
# + +
# + Autor : Stefan Feeser, Karlstein, OpenSource +
# + Datum : 14.08.2005 +
# + Version : 0.1 +
# + Aenderungen : 14.08.2005 Ersterstellung +
# + +
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
use strict;
#
# ------------------ Deklarationsteil -------------------
#
my $str_in = ""; # Einlesevariable
my $str_out = "";
my $str_janein = "";
my $str_zielname = "";
my $str_org = "";
my $str_kopnam = "";
my $str_quelle = "";
my $str_ziel = "";
my $str_regex_1 = "";
my $str_regex_2 = "";
my $str_pfad_in = "/daten/multimedia/grafik/in/"; # Standart: /media/cdrom/
my $str_pfad_out = "/daten/multimedia/grafik/out/";
my $str_pfad_thp = "/daten/multimedia/grafik/thump/";
my $str_fehler = "";
my $int_fehler = 0;
my $int_i = 0; # Zaehler fuer Schleifen
my $int_erg = 0;
my $str_lsdat = ""; # Hilfsvariable
my $str_firstdat = "";
my $str_lastdat = "";
#
# -------------------- Hauptprogramm --------------------
#
# Verzeichnisse erfragen
system "clear";
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
print "+ +\n";
print "+ Willkommen beim Programm img-chng-name.pl +\n";
print "+ -- Namenskonvertierung von jpg-Dateien -- +\n";
print "+ +\n";
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
print "\n";
print "Bitte geben Sie zunaechst den Zielpfad an:\n";
print "(Vorgabe ist " . $str_pfad_out . " ):\n";
chomp ($str_out =<STDIN>);
if ($str_out ne "") {
$str_pfad_out = $str_out;
}
print "Bitte geben Sie den Pfad an von dem die jpg-Dateien eingelesen\n";
print "werden sollen (Vorgabe ist " . $str_pfad_in . " ):\n";
chomp ($str_in =<STDIN>);
if ($str_in ne "") {
$str_pfad_in = $str_in;
}
print "Der Pfad " . $str_pfad_in . " wird nun durchsucht!\n";
# Pruefen ob sich eine CD mit den gewuenschten Bildern im Laufwerk befindet
opendir VERZ, $str_pfad_in or die "Kann $str_pfad_in nicht oeffnen: $!\n";
while ($str_lsdat = readdir VERZ) {
next if $str_lsdat eq "." or $str_lsdat eq ".."; # Punkt und Punkt Punkt ueberspringen
if ($str_lsdat =~ /\.[jJ][pP][gG]$/) { # Pruefen nach jpgs
$int_i += 1;
if ($int_i eq 1) {
$str_firstdat = $str_lsdat;
}
$str_lastdat = $str_lsdat;
} else {
next;
}
$int_erg = $int_i;
}
closedir VERZ;
if ($int_i >= 1) {
system "clear";
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
print "+ +\n";
print "+ Analysen des Programms img-chng-name.pl +\n";
print "+ +\n";
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
print "\n";
print "1. Pruefen der im Deklarationsteil angegebenen Verzeichnisse\n";
print "\n";
print "Im Verzeichnis " . $str_pfad_in . " wurden insgesamt\n" . $int_erg ." jpg-Datei(en) gefunden. ";
print "Die erste gefundene Datei war:\n";
print "\n";
print " >> " . $str_firstdat . " << \n";
print "\n";
print "Die letzte gefundene Datei war:\n";
print "\n";
print " >> " . $str_lastdat . " << \n";
print "\n";
print "H I N W E I S: Sollten die gefundenen Dateien in ihrem Muster\n";
print "nicht uebereinstimmen, sollten Sie die Dateilliste im angegebenen\n";
print "Pfad ggf. veraendern!\n";
print "\n";
print "2. Suchmusterpruefung und Namensvergabe\n";
print "\n";
print "Bitte geben Sie nun den Bildnamen und das Datum ein\n";
print "(Beispiel: 200409_kreuzlingen)\n";
chomp ($str_zielname = <STDIN>);
if ($str_zielname eq "") {
$str_fehler = "Sie haben keinen Namen angegeben";
$int_fehler = 1;
&fehler ($str_fehler,$int_fehler);
exit;
}
print "Ist der Bildname " . $str_zielname . " so in Ordnung?\n";
chomp ($str_janein = <STDIN>);
if ($str_janein =~ /[Jj][Aa]/) {
print "\n";
# RegEx abfragen und Funktionsweise pruefen (Ergebnisausgabe)
print "Bitte geben Sie nur ein Suchmuster (RegEx) fuer die Konver-\ntierung an.\n";
print "Zunaechst das Muster vor der Indexzahl:\n";
chomp ($str_regex_1 = <STDIN>);
print "Und nun das Muster danach:\n";
chomp ($str_regex_2 = <STDIN>);
print "Der regulaere Ausdruck wuerde folgende Konvertierung\n";
print "der ersten gefundenen Datei " . $str_firstdat . " vornehmen:\n\n";
$str_firstdat =~ s/$str_regex_1//;
$str_firstdat =~ s/$str_regex_2//;
print $str_zielname . "_" . $str_firstdat . "\n\n";
print "Die letzte gefundene Datei " .$str_lastdat . " wuerde so konvertiert:\n\n";
$str_lastdat =~ s/$str_regex_1//;
$str_lastdat =~ s/$str_regex_2//;
print $str_zielname . "_" . $str_lastdat . "\n";
print "\n";
print "Sind Sie mit dem Ergebnis zufrieden?\n";
chomp ($str_janein = <STDIN>);
if ($str_janein =~ /[Jj][Aa]/) {
system "clear";
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
print "+ +\n";
print "+ Konvertierung des Dateinamens und Kopiervorgang +\n";
print "+ +\n";
print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
print "\n";
print "Die Dateien werden nun umbenannt und ins angebene Verzeichnis\n";
print "kopiert.\n\n";
# Eigentliche Dateinamenaenderung durchfuehren
opendir VERZ, $str_pfad_in or die "Kann $str_pfad_in nicht oeffnen:$!\n";
while ($str_lsdat = readdir VERZ) {
next if $str_lsdat eq "." or $str_lsdat eq "..";
if ($str_lsdat =~ /\.[jJ][pP][gG]$/) {
$str_quelle = $str_lsdat;
$str_lsdat =~ s/$str_regex_1//;
$str_lsdat =~ s/$str_regex_2//;
$str_kopnam = $str_zielname . "_" . $str_lsdat;
$str_ziel = $str_pfad_out . $str_kopnam;
$str_quelle = $str_pfad_in . $str_quelle;
print "Quelle: " . $str_quelle . "\n";
print "Ziel: " . $str_ziel . "\n";
system "cp $str_quelle $str_ziel";
print "ok\n";
}
}
closedir VERZ;
print "\n------\n";
print "\n";
print "E N D E: Das Kopieren und Umbenennen ist erfolgt!\n";
} else {
$str_fehler = "Der regulaere Ausdruck war nicht ok!";
$int_fehler = 4;
&fehler ($str_fehler,$int_fehler);
exit;
}
} else {
$str_fehler = "Der Name war falsch";
$int_fehler = 2;
&fehler ($str_fehler,$int_fehler);
exit;
}
} else {
$str_fehler = "Das Einleseverzeichnis war leer! Bitte pruefen Sie ob\nggf. das Medium noch gemountet werden muss.\n";
$int_fehler = 3;
&fehler ($str_fehler,$int_fehler);
exit;
}
#
# --------------------- Subroutinen ---------------------
#
# Ausgabe fuer im Programm vorkommende Fehler
sub fehler {
$str_fehler = $_[0];
system "clear";
print "Das Programm wurde wegen einem Fehler beendet!\n";
print "----------------------------------------------\n";
print "\n";
print $int_fehler . ": " . $str_fehler . "\n";
print "\n";
}