Réponses:
Vous pouvez essayer l'approche suivante: au lieu de scp, utilisez dd pour ignorer la partie téléchargée et ajouter le reste au fichier.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Optimisation possible: travailler avec de gros blocs. Laissons cela comme un devoir.
dd
avec de petites tailles de blocs peut être lent (seulement 350 kB / s ici). Heureusement, les scp
transferts semblent provenir de blocs de 1024 octets. Si oui pour votre fichier (ou bien, en tronquant au plus proche bloc de 1024 octets), vous pouvez accélérer comme ceci: ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Notez qu'il $sofar
doit alors y avoir le nombre de blocs de 1024 octets à ignorer!)
rsys
dans la deuxième ligne est juste un exemple de nom d'hôte et non un argument spécial ssh
. Je vous suggère de le remplacer par user@host
pour éviter toute confusion.
Oui, il existe des moyens de reprendre à partir du point d'interruption, mais il n'est pas possible d'utiliser scp. sftp reget filename
fait ce dont vous avez besoin. Yarek et Grawity ont fourni des solutions valides que je +1 aux deux, mais pour reprendre à partir d'un point d'interruption, j'aime rsync. Les exemples de commandes fournis supposent tous deux que vous récupérez un fichier d'un serveur distant vers votre poste de travail local (téléchargement). Veuillez garder à l'esprit que les deux derniers paramètres doivent être considérés comme source_file et target_file dans cet ordre. La syntaxe du nom de fichier varie selon que le fichier source ou cible est local ou distant. Si j'envoyais (téléchargeais) des fichiers [texte], je réécrirais les exemples fournis comme suit:
# Du local au distant sofar = `ssh remote_system ls -l fichier_interrompu | awk '{print $ 5}' '; dd if = fichier_source bs = 1 skip = $ sofar | ssh remote_system "cat >> ./interrupted_file"
Et à la solution rsync, j'ajoute -e ssh
. Vous devez déterminer si vous avez besoin ou non de verbosité, de compression, de préserver la propriété, les autorisations, l'horodatage, les répertoires récurrents, etc. Vérifiez les pages de manuel et Google, concernant le paramètre -L. Vous pouvez souhaiter que les liens symboliques restent en tant que liens au lieu de les référencer.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
scp -o ConnectTimeout 60
Vous permet de spécifier le délai d'expiration d'une connexion. Peut empêcher votre connexion de se rompre.
Oui, si les deux extrémités prennent en charge sftp - après l' scp remoteuser@remotehost:/absolute/filename .
échec, vous pouvez reprendre en faisant sftp remoteuser@remotehost
, puis reget /absolute/filename
reprendre le téléchargement.