#!/usr/bin/perl my $ftp = new Herbaer::Upload ("/geheimer/pfad/zu/zugangsdaten"); $ftp -> putbase ("/das/lokale/dokumentenverzeichnis"); $ftp -> cmd ("putbase /das/lokale/dokumentenverzeichnis"); $ftp -> cmd ("put datei_1"); $ftp -> cmd ("putnotex dir/datei_2"); $ftp -> cmd ("putnewer dir/neu/datei_3");
Das Modul Herbaer::Upload
kapselt das Standard-Modul Net::FTP
für Anwendungen zur Pflege meiner Website.
Die Datei Upload.pm
wird unter dem Teilpfad Herbaer/Upload.pm
des Suchpfades für Perl-Module (@INC
) gesucht. Auf meinem Rechner ist /usr/local/share/perl/5.10.1/Herbaer/Upload.pm
ein symbolischer Verweis.
my $ftp = new Herbaer::Upload ($secrets_file, $verbose, $millisec)
Ergibt eine neues Obekt für den FTP-Upload. $secrets_file
ist der Dateipfad der Datei mit den Zugangsdaten. Die weiteren Parameter sind optional. Ein positiver Wert von $verbose
führt zu (mehr) Meldungen nach STDERR
. $millisec
ist die Wartezeit in Millisekunden am Ende einer Ausführung der Prozedur cmd
.
Das Objekt speichert die folgenden Daten (Eigenschaften):
ftp
Die Net::FTP - Instanz
verbose
Eine nicht negative Zahl, bestimmt den Umfang der Meldungen an STDERR
.
putbase
Der Pfad eines lokalen Verzeichnisses. Dieses Verzeichnis ist die Basis für alle relativen Dateipfade in Put-Befehlen. Siehe putbase
.
remotedir
Das aktuelle Verzeichnis auf dem FTP-Server mit abschließendem Schrägstrich.
usleep
Die Wartezeit nach der Ausführung eines FTP-Befehl durch cmd
in Mikrosekunden.
Die FTP-Zugangsdaten werden aus einer Textdatei gelesen. Die Textdatei wird zeilenweise verarbeitet. Zeilen, die mit dem Zeichen #
beginnen, sind Kommentarzeilen. Zeilen, die nur Leerraum-Zeichen enthalten, werden übergangen. Andere Zeilen haben den Aufbau
key
=value
Vor und nach dem Gleichheitszeichen können beliebig viele Leerzeichen stehen. Der Wert besteht aus Nicht-Leer-Zeichen. Nach dem Wert können ein Leerzeichen und weitere Zeichen als Kommentar folgen. Hier werden die Werte zu den folgenden Schlüsseln (key
) gelesen:
ftp.host
ftp.user
ftp.password
Ein Beispiel für eine Zugangsdaten-Datei ist secrets
.
$ftp -> putbase ($local_put_dir)
$local_put_dir
ist ein absoluter oder relativer Verzeichnispfad. Ein relativer Verzeichnispfad bezieht sich auf das bisherige lokale Basisverzeichnis für put
-Befehle. Wenn das Verzeichnis zu dem Pfad existiert, wird es das neue lokale Basisverzeichnis für put
-Befehle. Der Rückgabewert ist der Pfad des bisherigen Basisverzeichnisses für put
-Befehle (s. putbase
).
Wenn $local_put_dir
nicht definiert oder leer ist, wird nur der Pfad des bisherigen Basisverzeichnisses für put
-Befehle zurückgegeben.
$ftp -> cmd ($command_line)
$command_line
ist ein Befehl, der ausgeführt sind. Nach der Ausführung wird usleep
Mikrosekunden gewartet. Die möglichen Befehle sind nachfolgend beschrieben.
$ftp -> cmd ("put $path_to_file_or_dir")
$path_to_file_or_dir
ist ein relativer Pfad bezüglich des lokalen Basisverzeichnisses für put
-Befehle (putbase
) und serverseitig bezüglich des FTP-Wurzelverzeichnisses.
Wenn $path_to_file_or_dir
ein lokaler Verzeichnispfad ist, wird die Funktion rekursiv für alle Unterpfade des Verzeichnisses aufgerufen.
Wenn unter dem Pfad eine lokale Datei existiert, wird sie hochgeladen. Eine existierende Datei auf dem Server wird überschrieben. Fehlende Verzeichnisse auf dem Server werden bei Bedarf angelegt, aber nicht, wenn eine gleichnamige Datei existiert.
$ftp -> cmd ("putnotex $path_to_file_or_dir")
Dieser Befehl ist ähnlich dem Befehl put $path_to_file
. Eine Datei wird nur dann hochgeladen, wenn auf dem Server keine Datei unter dem Pfad existiert.
$ftp -> cmd ("putnewer $path_to_file_or_dir")
Dieser Befehl ist ähnlich dem Befehl put $path_to_file
. Eine Datei wird nur hochgeladen, wenn auf dem Server keine Datei unter dem Pfad existiert oder wenn die existierende Datei älter ist als die lokale Datei.
Wenn viele Dateien schnell hochgeladen worden sind, dauert die Ausführung eines nächsten put-Befehls manchmal Minuten. Vielleicht kann eine Wartezeit zwischen zwei Uploads dem Server etwas mehr Ruhe verschaffen (2020-04-17).