Ich habe 1,6 Millionen Dateien auf Server A, von denen nur etwa 20.000 auf Server B gelangen müssen. Das Ziel, Server B, befindet sich auf dem gemeinsam genutzten Hosting von GoDaddy, sodass ich mich auf scp beschränke, um viele Dateien gleichzeitig zu übertragen.
Ich möchte aus einer SQL-Abfrage eine TXT-Datei mit mehr als 20.000 Dateien erstellen und diese Liste dann an scp senden. Gibt es dafür Optionen?
cat /proc/version
gibt mir Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014
rsync
war auch mein erster Gedanke, aber GoDaddy hat eine Menge Probleme, neue Software über SSH zu installieren. Ja, die Dateipfade befinden sich derzeit in einer SQL-Datenbank, aber ich kann diese problemlos in eine Textdatei extrahieren.rsync -L
um die Dateien auf den Remote-Server zu kopieren. Der Hauptnachteil ist, dass Sie das Verzeichnis anschließend bereinigen müssen. Ich denke nicht, dass dies eine formelle Antwort auf diese Frage ist, deshalb habe ich als Kommentar hinzugefügt.Antworten:
Wenn Sie die Textdatei bereits erstellt haben, gehen Sie wie folgt vor
Dies geht Zeile für Zeile von der Ausgabe der Datei.txt und führt den Befehl scp pro Zeile aus. Ich hoffe das hilft.
quelle
xargs
auf demscp
Aufruf war Verwendungxargs
auf einemcp
auf dem Remote - Server die Dateien in ein Verzeichnis, ein wenig wie zu isolieren:cat files.txt | xargs -l bash -c 'cp $0 $1'
, dann verwendet , um einen einzigenscp
Befehl ziehen dieses Verzeichnis. Danke!Die Antwort funktioniert sehr gut. Ich habe
xargs -a
die Datei immer an standard out gesendet. Ich habe das dann mit der ursprünglichen Antwort von kombiniertcat /location/file.txt | xargs -i scp {} user@server:/location
Meine Antwort:
quelle
xargs -a
Überbeanspruchungcat
?cat
ist portabler, da die Verfügbarkeit des-a
forxargs
systemabhängig ist.Bei den obigen Antworten müssen Sie sich für jede übertragene Datei authentifizieren. SCP läuft auf SSH und GoDaddy bietet über SSH Zugriff auf andere Befehle wie tar. Daher ist die beste Methode, tar mit ssh zu verwenden, und zwar über:
Befindet sich die Dateiliste in STDIN, können Sie stattdessen Folgendes tun: Hinweis: cat wird hier nur zum Generieren von STDIN verwendet
Um die Übertragungszeit auf Kosten zusätzlicher Verarbeitungszeit zu verkürzen, können Sie beiden tar-Befehlen -z oder -j hinzufügen, um die Komprimierung von gzip bzw. bzip zu aktivieren.
quelle
Ich wollte dasselbe für die Liste der Ordner tun, und keine der Antworten, die verwendet wurden,
xargs
funktionierte für mich. Am Ende löste ich das einfach mit:Wo ich meine Dateiliste an die Shell-Erweiterung weitergebe. Ich denke, dass dies für alle hilfreich sein kann, die nach einer alternativen Lösung suchen.
quelle
Ziehen Sie rsync als Alternative in Betracht , die über eine integrierte SSH-Unterstützung verfügt und das Lesen aus einer Liste von Dateien unterstützt, die verwendet werden
--files-from
.Beispiel:
Vorteile gegenüber scp:
scp
sich vonrsync
?Siehe auch:
quelle