Antworten:
Sie können folgende approch versuchen: statt scp Verwendung dd das heruntergeladene Teil zu überspringen und den Rest an die Datei anhängen.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Mögliche Optimierung: Arbeiten Sie mit großen Blöcken. Lassen wir dies als Hausaufgabe.
dd
mit kleinen Blockgrößen kann langsam sein (hier nur 350 kB / s). Glücklicherweise scp
scheinen Übertragungen in 1024-Byte-Blöcken zu erfolgen. Wenn dies für Ihre Datei der Fall ist (oder indem Sie sie auf den nächsten 1024-Byte-Block kürzen), können Sie sie folgendermaßen beschleunigen : ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Beachten Sie, dass $sofar
dann die Anzahl der 1024-Byte-Blöcke sein muss, um zu überspringen!)
rsys
in der zweiten Zeile nur ein Beispiel für einen Hostnamen steht, für den kein spezielles Argument vorliegt ssh
. Ich schlage vor, Sie ersetzen es durch user@host
, um Verwirrung zu vermeiden.
Ja, es gibt Möglichkeiten, ab dem Punkt der Unterbrechung fortzufahren, aber mit scp ist dies nicht möglich. sftp reget filename
macht was du brauchst. Yarek und Grawity haben gültige Lösungen bereitgestellt, die I +1 für beide sind, aber für die Wiederaufnahme von einem Unterbrechungspunkt mag ich rsync. Bei den angegebenen Beispielbefehlen wird davon ausgegangen, dass Sie eine Datei von einem Remote-Server auf Ihre lokale Workstation abrufen (Herunterladen). Bitte beachten Sie, dass die letzten beiden Parameter in dieser Reihenfolge als Quelldatei und Zieldatei betrachtet werden sollten. Die Syntax des Dateinamens hängt davon ab, ob die Quell- oder Zieldatei lokal oder remote ist. Wenn ich [Text] -Dateien senden (hochladen) würde, würde ich die Beispiele wie folgt umschreiben:
# Von lokal zu remote sofar = `ssh remote_system ls -l unterbrochene_Datei | awk '{print $ 5}' `; dd if = source_file bs = 1 skip = $ sofar | ssh remote_system "cat >> ./interrupted_file"
Und zur rsync-Lösung füge ich hinzu -e ssh
. Sie sollten überlegen, ob Sie Ausführlichkeit, Komprimierung, Beibehaltung des Eigentums, Berechtigungen, Zeitstempel, Rekursionsverzeichnisse usw. benötigen. Überprüfen Sie die Manpages und Google auf den Parameter -L. Möglicherweise möchten Sie, dass Symlinks als Links verbleiben, anstatt auf sie zu verweisen.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
scp -o ConnectTimeout 60
Hier können Sie das Zeitlimit für eine Verbindung angeben. Kann verhindern, dass Ihre Verbindung unterbrochen wird.
Ja, wenn beide Enden sftp unterstützen - nach einem scp remoteuser@remotehost:/absolute/filename .
Fehler können Sie fortfahren, indem Sie den Download fortsetzen sftp remoteuser@remotehost
und dann reget /absolute/filename
fortsetzen.