
Ich lade gelegentlich eine sehr große Datei über scp herunter und es besteht jedes Mal eine geringe Wahrscheinlichkeit, dass die Verbindung abbricht und die Übertragung mittendrin unterbrochen wird.
Gibt es eine Möglichkeit, es fortzusetzen?
Antwort1
Sie können den folgenden Ansatz versuchen: Anstattscpverwendenddum den heruntergeladenen Teil zu überspringen und den Rest an die Datei anzuhängen.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh user@host "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Mögliche Optimierung: Mit großen Blöcken arbeiten. Das lassen wir als Hausaufgabe.
Antwort2
Ohne scp
.
Wenn es an beiden Enden vorhanden ist, können Sie es rsync -LvzP remoteserver:path/to/file localfile
zum Übertragen einer einzelnen Datei verwenden.
Antwort3
Ja, es gibt Möglichkeiten, ab dem Unterbrechungspunkt fortzufahren, aber mit scp ist das nicht möglich. sftp reget filename
tut, was Sie brauchen. Yarek und Grawity haben gültige Lösungen bereitgestellt, für die ich beide +1 gebe, aber für die Fortsetzung ab einem Unterbrechungspunkt bevorzuge ich rsync. Die bereitgestellten Beispielbefehle gehen beide davon aus, dass Sie eine Datei von einem Remote-Server auf Ihre lokale Arbeitsstation abrufen (herunterladen). Bitte beachten Sie, dass die letzten beiden Parameter in dieser Reihenfolge als Quelldatei und Zieldatei betrachtet werden sollten. Die Syntax des Dateinamens variiert je nachdem, ob die Quell- oder Zieldatei lokal oder remote ist. Wenn ich [Text-]Dateien senden (hochladen) würde, würde ich die bereitgestellten Beispiele wie folgt umschreiben:
#Vom Lokalen zum Remote-Arbeitsplatz sofar=`ssh remote_system ls -l unterbrochene_Datei | awk '{print $5}'`; dd if=Quelldatei bs=1 skip=$sofar | ssh remote_system "cat >> ./unterbrochene_Datei"
Und zur rsync-Lösung füge ich hinzu -e ssh
: Sie sollten überlegen, ob Sie Ausführlichkeit, Komprimierung, Beibehaltung von Eigentumsrechten, Berechtigungen, Zeitstempel, rekursive Verzeichnisse usw. benötigen. Überprüfen Sie Manpages und Google bezüglich des Parameters -L. Möglicherweise möchten Sie, dass Symlinks als Links erhalten bleiben, anstatt auf sie zu verweisen.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
Antwort4
Ja, wenn beide Enden SFTP unterstützen, scp remoteuser@remotehost:/absolute/filename .
können Sie nach einem Fehler fortfahren, indem Sie sftp remoteuser@remotehost
und dann reget /absolute/filename
den Download fortsetzen.