Wie kann ich den Upload eines Verzeichnisses per FTP parallelisieren?

8

Ich muss ein Verzeichnis mit einem ziemlich komplizierten Baum (viele Unterverzeichnisse usw.) per FTP hochladen. Ich kann dieses Verzeichnis nicht komprimieren, da ich außer FTP keinen Zugriff auf das Ziel habe - z. B. keinen Tar. Da dies über eine sehr lange Distanz (USA => Australien) erfolgt, ist die Latenz ziemlich hoch.

Im Anschluss an die Beratung in Wie FTP mehrere Ordner auf einem anderen Server mit mput in Unix? Ich verwende derzeit ncftp, um die Übertragung mit durchzuführen mput -r. Leider scheint dies jeweils nur eine Datei zu übertragen, wodurch ein Großteil der verfügbaren Bandbreite für den Kommunikationsaufwand verschwendet wird.

Gibt es eine Möglichkeit, diesen Prozess zu parallelisieren, dh mehrere Dateien gleichzeitig aus diesem Verzeichnis hochzuladen? Natürlich könnte ich es manuell teilen und mput -rauf jedem Block ausführen , aber das ist ein langwieriger Prozess.

Eine CLI-Methode wird stark bevorzugt, da der Client-Computer tatsächlich ein Headless-Server ist, auf den über SSH zugegriffen wird.

Bob
quelle
Wäre rsynceine Option? bearbeiten anscheinend nicht, da es nicht über ftp funktioniert. Es könnte sich lohnen, den Zielserver-Administrator zu fragen, ob er bereit ist, Ihnen sftpZugriff zu gewähren. Sie könnten sich nicht anmelden, rsyncwürden aber funktionieren.
Shadur

Antworten:

9

lftp würde dies mit dem Befehl tun mirror -R -P 20 localpath- Spiegelsynchronisation zwischen Standorten, und -R verwendet den Remote-Server als Ziel, wobei P 20 parallele Übertragungen gleichzeitig ausführt.

Wie erklärt in man lftp:

   mirror [OPTS] [source [target]]

   Mirror specified source directory to local target directory. If  target
   directory ends with a slash, the source base name is appended to target
   directory name. Source and/or target can be URLs pointing  to  directo‐
   ries.


        -R,    --reverse                 reverse mirror (put files)
        -P,    --parallel[=N]            download N files in parallel
Geselle Geek
quelle
2

Sie können versuchen, gnu parallel und curl zu verwenden, um es zu automatisieren.

dann könnten Sie etwas tun wie:

find . -t f -name "*.pdf" | parallel -j 4 curl -T {} ftp://ftp.site.com --user me:pass

Dadurch werden 4 Jobs pro CPU ausgeführt, wobei alle PDFs im Arbeitspfad hochgeladen werden.

rking
quelle
Dies ist ein möglicher Ansatz, hat jedoch den Nachteil, dass für jede Datei eine einmalige Authentifizierung erforderlich ist - wiederum wird durch die hohe Latenz viel Overhead verschlimmert.
Bob