Je télécharge parfois un très gros fichier via scp et il y a une petite chance à chaque fois que la connexion baisse et coupe le transfert à mi-chemin.
Existe-t-il un moyen de le reprendre?
Je télécharge parfois un très gros fichier via scp et il y a une petite chance à chaque fois que la connexion baisse et coupe le transfert à mi-chemin.
Existe-t-il un moyen de le reprendre?
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, lesscp
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écialssh
. Je vous suggère de le remplacer paruser@host
pour éviter toute confusion.Avec
scp
, non.Si les deux extrémités l'ont, vous pouvez utiliser
rsync -LvzP remoteserver:path/to/file localfile
pour transférer un seul fichier.la source
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: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
la source
Il y a une autre solution (en plus de la
rsync
ou desdd
solutions énoncées ici) dont je suis surpris que personne n'ait parlé: c'est lareput
commande desftp
.la source
Vous permet de spécifier le délai d'expiration d'une connexion. Peut empêcher votre connexion de se rompre.
la source
Oui, si les deux extrémités prennent en charge sftp - après l'
scp remoteuser@remotehost:/absolute/filename .
échec, vous pouvez reprendre en faisantsftp remoteuser@remotehost
, puisreget /absolute/filename
reprendre le téléchargement.la source