Downloads automatisieren mit Windows-FTP oder curl


    Tags: , ,

    File Transfer Protocol (FTP)Wenn man Dateien regelmäßig von einem FTP-Server herunter­laden muss, dann bietet Windows zwei Bordmittel an, um diesen Vorgang zu automatisieren. Es handelt sich dabei um ftp.exe sowie um das später hinzugekommene curl. Für Letzteres benötigt man nur einen Befehl, für FTP kann man dafür ganze Scripts nutzen.

    Ein typisches Szenario für den regelmäßigen Download von Dateien könnte das Backup eines Web-Servers sein, das man lokal abspeichern möchte. In diesem Fall wäre es günstig, wenn sich der ganze Vorgang ohne Eingriff eines Benutzers ausführen ließe. Dann könnte man das Herunterladen der Backup-Dateien vom FTP-Server als Task in der Aufgaben­planung hinterlegen.

    Der Windows-eigene FTP-Client ist schon seit Ewigkeiten an Bord und hat seitdem kein nennenswertes Update mehr erhalten. Er unterstützt somit keinen verschlüsselten Transport, sondern nur die Übertragung im Klartext. In einem sicheren Netzwerk und für nicht allzu kritische Daten kann man das Tool aber sicherlich verwenden.

    Windows-FTP ist anders als etwa FileZilla ein spartanisches Programm für die Kommandozeile, das man aber dafür mit einer Abfolge von Befehlen aus einer Textdatei füttern kann. Nach dem Aufbau der Verbindung und der Anmeldung am Server kann man grundsätzlich alle Befehle hinterlegen, die auch im interaktiven Modus zulässig sind.

    Dieses Beispiel legt zuerst das Download-Verzeichnis des Benutzers als lokales Arbeitsverzeichnis fest, verbindet sich mit dem Server und meldet sich mit Benutzernamen und dessen Passwort an.

    Anschließend ist es sinnvoll, den interaktiven Modus mit prompt zu deaktivieren, weil das Script sonst beim Bestätigen mehrfacher Downloads hängenbleibt.

    Mit binary wechselt man vom standardmäßigen ASCII- in den Binärmodus, der etwa für ZIP-Archive angebracht ist.

    Wenn man sich anschließend noch nicht im richtigen Verzeichnis befindet, könnte man mit cd dorthin wechseln. Der Download erfolgt dann mit get bzw. mget, wenn man mehrere Dateien herunterladen will. Letzteres unterstützt Wildcards, so dass man als nächsten Befehl etwa

    mget *.gz

    in die obige Datei einträgt. Will man die Dateien nach dem Transfer löschen, dann folgt ein

    mdelete *.gz

    Die Session beendet man dann mit quit.

    Wenn man alle Befehle in einer Textdatei gespeichert hat, zum Beispiel mit dem Namen autoftp.txt, dann startet man den Download mit

    ftp.exe -s:autoftp.txt

    Automatisierter FTP-Download mit Hilfe eines Scripts

    FTP-Download mit curl

    Seit Windows 10 1809 gehört eine Implementierung von curl zum Lieferumfang des Betriebs­systems. Wenn man es allerdings unter PowerShell starten möchte, dann ruft man damit Invoke-WebRequest auf, weil standardmäßig ein solches Alias definiert ist. Man muss dort also curl.exe eingeben.

    Das Utility unterstützt mehrere Protokolle, darunter auch FTP und im Unterschied zu ftp.exe auch FTPS (über TLS). Gibt man den Schalter --ftp-ssl an, dann versucht es, eine sichere Verbindung aufzubauen und fällt auf FTP zurück, wenn dies nicht klappt. Erzwingen kann man FTPS mit --ssl-reqd.

    Die automatische Anmeldung erfolgt über den Parameter -u username:passwort bzw. --user username:passwort, gefolgt vom Pfad zur gewünschten Datei:

    curl.exe -u ftp:ftp -O ftp.gnu.org/gnu/wget/wget2-latest.tar.gz

    Über den Schalter -O teilt man curl mit, dass es die Datei unter dem gleichen Namen speichern soll. Will man eine andere Datei als Ziel, dann könnte man dies so erreichen:

    curl.exe -u ftp:ftp ftp.gnu.org/gnu/wget/wget2-latest.tar.gz -o wget.tar.gz

    Um beliebige Dateien aus einem Verzeichnis herunterzuladen, ist curl weniger flexibel als FTP, zumindest die Implementierung für Windows. Man kann sich zwar den Inhalt eines Verzeichnisses anzeigen lassen, indem man einen abschließenden Schrägstrich anhängt:

    curl ftp://ftp.gnu.org/gnu/wget/ -u ftp:ftp

    Für die Automatisierung hilft das aber nicht weiter, hier würde man Wildcards benötigen, wenn sich die Namen der Dateien regelmäßig ändern (etwa im Fall von Backups, deren Namen meist das Datum enthalten).

    FTP-Download mit curl, anschließendes Auflisten des Verzeichnisinhalts

    Fazit

    FTP ist ein altgedientes Verfahren für den Dateitransfer und bietet auch die Möglichkeit, Abläufe über Kommandos zu automatisieren, die man einfach Zeile für Zeile in einer Textdatei speichert. Der Windows-Client unterstützt jedoch keine sicheren Verbindungen, so dass man seinen Einsatz auf Umgebungen beschränken muss, wo dies kein Problem ist.

    In der Windows-Welt ist curl ein Neuling, der eine Vielzahl von Optionen bietet und mit mehreren Protokollen zurechtkommt. Für die Automatisierung von FTP-Downloads ist es aber weniger flexibel als FTP.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links

    2 Kommentare

    Hallo!

    Man kann sich helfen, indem man entweder die Ausgabe des curl-Befehls für das Anlisten der Dateien in einer for-Schleife auswertet und dann die Dateien einzeln an einen zweiten curl-Befehl übergibt oder einen Umweg nehmen, indem man zuerst die Ausgabe des curl-Befehls für das Anlisten der Dateien in eine Textdatei umleitet und diese dann mit einem for-Befehl auswertet und dadurch die Dateinamen an einen zweiten curl-Befehl übergibt.

    Klingt kompliziert, ist aber letztendlich ganz einfach.
    Funktioniert bei mir mit sehr gutem Erfolg.

    Gruß
    Bodo

    Was auch funktioniert ist wget bzw. BITS via PowerShell.