Comment reprendre scp avec des fichiers partiellement copiés?

J’utilise la commande shell scp pour copier un énorme dossier de fichiers.

Mais à un moment donné, j’ai dû tuer la commande en cours (par Ctrl + C ou tuer).

À ma connaissance, scp a copié les fichiers de manière séquentielle, il ne devrait donc y avoir qu’un seul fichier partiellement copié.

Comment la même commande scp peut-elle être reprise pour ne pas écraser avec succès les fichiers copiés et pour traiter correctement les fichiers partiellement copiés?

PS Je sais que je peux faire ce genre de choses dans rsync, mais scp est plus rapide pour moi pour une raison quelconque et je l’utilise à la place.

Vous devez utiliser rsync sur ssh

 rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path 

L’option clé est -P , qui est identique à --partial --progress

D’autres options, telles que -a (pour le mode archive) et -z (pour activer la compression) peuvent également être utilisées.

Le manuel: https://download.samba.org/pub/rsync/rsync.html

Une alternative à rsync:

Utilisez sftp avec l’option -r (copier récursivement des répertoires entiers) et l’option -a de la commande get de sftp pour reprendre les transferts partiels de fichiers existants.

Condition préalable: Votre implémentation sftp a déjà une option get -a .

Exemple:

Copiez le répertoire /foo/bar du serveur distant dans votre répertoire courant local. La bar répertoire sera créée dans votre répertoire local actuel.

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

Depuis OpenSSH 6.3, vous pouvez utiliser la commande reget dans sftp .

Il a la même syntaxe que get , sauf qu’il lance un transfert à partir de la fin d’un fichier local existant.

Une autre possibilité est d’essayer de sauver le scp que vous avez déjà commencé quand il cale.

ctrl + z en arrière-plan et arrêtez-le, puis passez au serveur de réception et connectez-vous, puis quittez. Maintenant, suivez le processus scp et regardez-le reprendre «stalled»!

Lorsque rsync se bloque également après quelques secondes lorsqu’il fonctionne correctement, je me suis retrouvé avec la solution de force brute suivante:

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

J’ai eu le même problème hier, en transférant un énorme vidage SQL via scp, j’ai eu de la chance avec wget --continue the_url

Cet article explique très bien http://www.cyberciti.biz/tips/wget-resume-broken-download.html