Führen Sie LFTP für eine Liste von Dateien aus

7

Ich habe eine durch Zeilenumbrüche getrennte Liste von Pfaden zu Dateien, die ich über LFTP herunterladen möchte, von einem Remotecomputer auf einen lokalen Computer mit derselben Verzeichnisstruktur. Gibt es eine Möglichkeit, die Liste der Dateien (den gesamten Pfad zur Datei auf dem Remotecomputer) an LFTP zu übergeben und nur diese herunterzuladen? Meine derzeitige Methode besteht darin, jede Datei einzeln an LFTP zu übergeben, herunterzuladen und dann denselben Vorgang mit der nächsten Datei zu wiederholen, bis meine Liste erschöpft ist. Das Stapeln der Dateien zum Herunterladen wäre natürlich viel schneller, meine aktuelle Lösung fühlt sich klobig an.

LivingInformation
quelle

Antworten:

3

Wie wäre es mit so etwas.

[root@localhost foo]# ls -l file*
-rw-r--r--. 1 root root 33 Jun 30 15:09 filelist
[root@localhost foo]# cat filelist
/tmp/file1
/tmp/file2
/tmp/file3
[root@localhost foo]# awk 'BEGIN { print "open localhost\nuser steve steve\n" } { print "get " $0 } END { print "exit" }' filelist | lftp
[root@localhost foo]# ls -l file*
-rw-r--r--. 1 root root  0 Jun 30 14:57 file1
-rw-r--r--. 1 root root  0 Jun 30 14:57 file2
-rw-r--r--. 1 root root  0 Jun 30 14:57 file3
-rw-r--r--. 1 root root 33 Jun 30 15:09 filelist
[root@localhost foo]#
Steve
quelle
2

Um die Antwort von Steve zu erweitern, spiegelt dieses Skript bei Bedarf eine Liste von Dateien, während Verzeichnisse beibehalten werden.

#!/bin/bash
gawk 'BEGIN { print "open ftp://example.com\n user username password\ncd /remote/dir/\n" } { if (match ($0 ,/.+\//, m)) print "mirror -v -O localbasedir/" m[0] " -f " $0  } END { print "exit" }' filelist | lftp
MarZab
quelle
Gibt es eine Chance, dass Sie mehr Details zu dieser GAWK-Zeichenfolge geben könnten?
Robert Mark Bram
lftp mirror kann nur Ordner spiegeln, daher nehme ich eine Liste von Pfaden, extrahiere den Ordner aus ihnen und erstelle dann ein lftp-Skript mit Spiegelbefehlen für jede der Dateien mit ihren Ordnern. Dies bedeutet, dass lftp sie nur aus dem ftp kopiert wenn sie sich seit der letzten Synchronisierung geändert haben
MarZab