Risposte:
Puoi provare il seguente approch: invece di scp usa dd per saltare la parte scaricata e aggiungere il resto al file.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Possibile ottimizzazione: lavorare con blocchi di grandi dimensioni. Lasciamo questo come compiti a casa.
dd
con blocchi di piccole dimensioni può essere lento (solo 350 kB / s qui). Fortunatamente, i scp
trasferimenti sembrano arrivare in blocchi da 1024 byte. Se è così per il file (oppure, troncando al blocco di byte più vicino 1024), è possibile accelerarlo in questo modo: ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Nota che $sofar
deve essere il numero di blocchi da 1024 byte da saltare!)
rsys
nella seconda riga è solo un esempio di nome host non un argomento speciale per ssh
. Ti suggerisco di sostituirlo con user@host
per evitare confusione.
Sì, ci sono modi per riprendere dal punto di interruzione, ma non è possibile usare scp. sftp reget filename
fa quello che ti serve. Yarek e Grawity hanno fornito soluzioni valide che ho fatto +1 su entrambi, ma per riprendere da un punto di interruzione, mi piace rsync. I comandi di esempio forniti presuppongono entrambi che si stia recuperando un file da un server remoto sulla workstation locale (download). Si prega di tenere presente che gli ultimi due parametri devono essere considerati file_origine e file_file in quell'ordine. La sintassi del nome file varia in base al fatto che il file di origine o di destinazione sia locale o remoto. Se inviassi (caricando) file [testuali], riscriverei gli esempi forniti come:
# Dal locale al remoto sofar = `ssh remote_system ls -l interrted_file | awk '{print $ 5}' '; dd if = file_origine_s bs = 1 skip = $ sofar | ssh remote_system "cat >> ./interrupted_file"
E alla soluzione rsync, aggiungo -e ssh
. Dovresti considerare se hai bisogno di verbosità, compressione, preservare la proprietà, autorizzazioni, timestamp, directory di recurse, ecc. Controlla le pagine man e google, riguardo al parametro -L. È possibile che i collegamenti simbolici rimangano come collegamenti anziché fare riferimento a essi.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
scp -o ConnectTimeout 60
Consente di specificare il timeout per una connessione. Potrebbe impedire la rottura della connessione.
Sì, se entrambe le estremità supportano sftp - dopo scp remoteuser@remotehost:/absolute/filename .
non riesce è possibile riprendere facendo sftp remoteuser@remotehost
e quindi reget /absolute/filename
riprendere il download.