2014-10-16 4 views
30

Ich benutze scp Shell-Befehl, um große Ordner von Dateien zu kopieren.Wie scp mit teilweise kopierten Dateien fortsetzen?

Aber irgendwann musste ich den laufenden Befehl beenden (mit Strg + C oder kill).

Zu meinem Verständnis scp kopiert Dateien nacheinander, so dass es nur eine teilweise kopierte Datei sein sollte.

Wie kann der gleiche scp-Befehl fortgesetzt werden, um erfolgreich kopierte Dateien zu überschreiben und teilweise kopierte Dateien ordnungsgemäß zu behandeln?

P.S. Ich weiß, dass ich diese Art von Sachen in rsync machen kann, aber scp ist aus irgendeinem Grund schneller für mich und ich benutze es stattdessen.

+2

Ich vermute, rsync ist langsamer, weil es einige zusätzliche Zeit verbringt Dinge tun, die Sie zu restar t eine Übertragung. Sie können nur rsync verwenden, um die teilweise Übertragung zu beenden. –

+2

Wenn du clever sein willst, kannst du 'dd' immer mit einer' 'skip''-Variablen versuchen und zu' ssh' pipen. –

Antwort

55

sollten Sie verwenden rsync über ssh

rsync -P -e ssh [email protected]:/remote/path /local/path 

Der Schlüssel Option ist -P, die gleich ist wie --partial --progress

Andere Optionen, wie -a (für Archiv-Modus) und -z (um die Komprimierung zu aktivieren) kann ebenfalls verwendet werden.

Das Handbuch: https://download.samba.org/pub/rsync/rsync.html

+6

Dies setzt die Kopie nicht fort. die Option '-P' fehlt für die Wiederaufnahme. – Markus

+7

Ich wollte nur darauf hinweisen, dass rsync eine mit scp gestartete Stapelkopie wieder aufnimmt. –

+1

Sie erhalten "Verzeichnis überspringen". Fehler, außer Sie geben auch '-r' an. Quelle: http://lucasb.eyer.be/snips/rsync-skipping-directory.html –

9

Eine Alternative zu rsync:

Verwenden sftp mit Option -r (rekursiv kopiert ganze Verzeichnisse) und Option -a von sftp ‚s get Befehl Teilübertragungen von vorhandenen Dateien fortzusetzen.

Voraussetzung: Ihre sftp Implementierung hat bereits eine get mit -a Option.

Beispiel:

Kopieren Verzeichnis /foo/bar von Remote-Server auf Ihrem lokales aktuelles Verzeichnis. Das Verzeichnis bar wird in Ihrem lokalen aktuellen Verzeichnis erstellt.

echo "get -a /foo/bar" | sftp -r server 
+1

Deine Lösung ist großartig, weil mein Server keine Anmeldung in ssh erlaubt, also rsync nicht t arbeiten. Ich musste jetzt uploaden anstatt runterzuladen. Hier ist mein Befehl: 'echo" put -a foo/bar "| sftp -r server:/foo' –

2

Eine andere Möglichkeit ist zu versuchen, die scp zu retten Sie haben bereits damit begonnen, wenn es Stände.

Strg + z in den Hintergrund und stoppen Sie es, dann ssh über den empfangenden Server und Login, dann beenden. Jetzt fg den scp-Prozess und beobachten Sie es von "angehalten" wieder aufzunehmen!

+0

Hat nicht für mich gearbeitet. – NateS

+0

Arbeitete für mich auf Mac OS X. Danke für die Veröffentlichung, es hat mir heute meinen Speck gerettet! –

-2

habe ich das gleiche Problem gestern, eine riesige SQL via scp Dump über Übertragung, ich hatte Glück mit wget --continue the_url

Das Blog-Post es ganz gut http://www.cyberciti.biz/tips/wget-resume-broken-download.html

+0

Es wird empfohlen, die relevanten Teile von einer URL in die Antwort zu kopieren, wenn die Site nicht mehr funktioniert. – Ryre

0

Wenn rsync Ständen nach Paar auch erklärt der Sekunden, als anfänglich gut lief, endete ich mit der folgenden Brute-Force-Lösung: