#!/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):
ftpDie Net::FTP - Instanz
verboseEine nicht negative Zahl, bestimmt den Umfang der Meldungen an STDERR.
putbaseDer Pfad eines lokalen Verzeichnisses. Dieses Verzeichnis ist die Basis für alle relativen Dateipfade in Put-Befehlen. Siehe putbase.
remotedirDas aktuelle Verzeichnis auf dem FTP-Server mit abschließendem Schrägstrich.
usleepDie 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.hostftp.userftp.passwordEin 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).