it-swarm.com.de

Wie kann ich scp mit teilweise kopierten Dateien fortsetzen?

Ich verwende den Befehl scp Shell, um riesige Ordner von Dateien zu kopieren.

Aber irgendwann musste ich den laufenden Befehl beenden (per Strg + C oder Kill).

Nach meinem Verständnis hat scp die Dateien sequentiell kopiert, daher sollte es nur eine teilweise kopierte Datei geben.

Wie kann derselbe Befehl scp wieder aufgenommen werden, um erfolgreich kopierte Dateien nicht zu überschreiben und teilweise kopierte Dateien ordnungsgemäß zu verarbeiten?

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.

54
Bohdan

Sie sollten rsync über ssh verwenden.

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

Die Schlüsseloption ist -P, was derselbe ist wie --partial --progress.

Andere Optionen wie -a (für den Archivmodus) und -z (zur Komprimierung aktivieren) können ebenfalls verwendet werden.

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

90
jordi

Eine Alternative zu rsync:

Verwenden Sie sftp mit der Option -r (ganze Verzeichnisse rekursiv kopieren) und die Option -a des sftp-Befehls get, um die teilweise Übertragung vorhandener Dateien wieder aufzunehmen. 

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

Beispiel:

Kopieren Sie das Verzeichnis /foo/bar vom Remote-Server in Ihr aktuelles aktuelles Verzeichnis. Das Verzeichnis bar wird in Ihrem lokalen Aktuellen Verzeichnis erstellt.

echo "get -a /foo/bar" | sftp -r server
19
Cyrus

Seit OpenSSH 6.3 können Sie den Befehl reget in sftp verwenden.

Es hat dieselbe Syntax wie die Variable get, außer dass eine Übertragung vom Ende einer vorhandenen lokalen Datei gestartet wird.

6
Martin Prikryl

Eine andere Möglichkeit besteht darin, zu versuchen, den SCP zu retten, den Sie bereits gestartet haben, wenn er stehen bleibt.

ctrl + z in den Hintergrund und stoppen Sie es, dann ssh zum empfangenden Server und melden Sie sich an, dann beenden Sie den Vorgang. Jetzt fg den SCP-Prozess und beobachten Sie, wie er von 'Stalled' wieder aufgenommen wird!

3
Puckfist

Als rsync nach ein paar Sekunden auch stoppte, als er anfänglich in Ordnung war, erhielt ich die folgende Brute-Force-Lösung:

cat run_me.sh
#!/bin/bash
while [ 1 ]
do
  rsync --partial --progress --rsh=ssh [email protected]:/path/file.tgz file.tgz &
  TASK_PID=$!
  sleep 60
  kill $TASK_PID
  sleep 2
done

Sie können die Optionen -rsh und -P unter rsync verwenden. -P ist zum teilweisen Herunterladen und -rsh zeigt an, dass die Übertragung über ssh procotol erfolgt ist.

Der vollständige Befehl wäre: rsync -P -rsh [email protected]:/remote/path /local/path

0
Bunny Rabbit