Scripting von FTP-Übertragungen

7

Gibt es eine Möglichkeit, ftp zu zeigen und kleine FTP-Skripte zu schreiben?

Zum Beispiel:

#!/usr/bin/ftp
open 192.168.1.1
put *.gz
quit

Irgendwelche Gedanken?

user3454
quelle

Antworten:

10

Nicht mit den ftpProgrammen, auf die ich gestoßen bin, da sie ein Skript für ihre Standardeingabe erwarten, aber ein Shebang würde den Skriptnamen in ihrer Befehlszeile übergeben.

Sie können ein Here-Dokument verwenden , um ein Skript ftpüber einen Shell-Wrapper zu übergeben.

#!/bin/sh
ftp <<EOF
open 192.168.1.1
put *.gz
EOF

Lftp akzeptiert einen Skriptnamen, der als Argument übergeben wird.

#!/usr/bin/lftp -f
open 192.168.1.1
put *.gz

Ncftp wird mit zwei Tools geliefertncftpget und eignet sichncftpput für einfache Stapel von Gets oder Puts.

Zsh enthält ein FTP-Modul . Die Verwendung einer geeigneten Shell anstelle eines direkten FTP-Skripts hat den Vorteil, dass Sie auf Fehler reagieren können.

#!/bin/zsh
zmodload zsh/zftp
open 192.168.1.1
put *.gz

Natürlich gibt es viele andere Sprachen, die Sie verwenden können: Perl, Python, Ruby usw.

Ein anderer Ansatz besteht darin, den FTP-Server als Verzeichnis bereitzustellen und dann cp( rsyncoder andere Tools) zum Kopieren von Dateien zu verwenden. Es gibt viele FUSE- Dateisysteme für den FTP-Zugriff, hauptsächlich CurlFtpFS und LftpFS .

Beachten Sie, dass Sie mit SSH-Zugriff besser dran sind, wenn Sie die Authentifizierung verwenden möchten (wahrscheinlich beim Hochladen) und die Kontrolle über den Server haben. Es ist sicherer und flexibler. Um Dateien über SSH zu kopieren, können Sie scpoder sftpoder rsync für eine effiziente Synchronisierung (falls einige der Dateien bereits vorhanden sind) oder Unison (für eine bidirektionale Synchronisierung) verwenden oder mit SshFS mounten .

Gilles 'SO - hör auf böse zu sein'
quelle
Gute Antwort und um zu antworten: Das Skript, das ich zu ersetzen versuche, verwendet die "ftp << EOF" -Methode, die funktioniert und in Ordnung ist. Es sieht aus wie das Muster, das Shebangs zu abstrahieren versuchen.
user3454