Herbaer::Upload


Übersicht

#!/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");
  

Beschreibung

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.

Funktionen

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.

FTP-Zugangsdaten

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.

Problem

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).