Con scp
, no.
Se entrambe le estremità lo hanno, puoi usare rsync -LvzP remoteserver:path/to/file localfile
per trasferire un singolo file.
Puoi provare il seguente approccio:invece di scp usa gg 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 grandi. Lasciamo questo come compito a casa.
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 io +1 a entrambi, ma per riprendere da un punto di interruzione, mi piace rsync. Entrambi i comandi di esempio forniti presuppongono che tu stia recuperando un file da un server remoto alla tua workstation locale (download). Tieni presente che gli ultimi due parametri devono essere considerati source_file e target_file in questo ordine. La sintassi del nome file varia a seconda che il file di origine o di destinazione sia locale o remoto. Se stavo inviando (caricando) file [di testo], riscriverei gli esempi forniti come:
#From local to remote sofar=`ssh remote_system ls -l interrupted_file | awk '{print $5}'`; dd if=source_file bs=1 skip=$sofar | ssh remote_system "cat >> ./interrupted_file"
E alla soluzione rsync, aggiungo -e ssh
. Dovresti considerare se hai bisogno o meno di verbosità, compressione, preservare la proprietà, autorizzazioni, timestamp, directory di ricorsione, ecc. Controlla le pagine man e google, per quanto riguarda il parametro -L. Potresti volere che i collegamenti simbolici rimangano come collegamenti invece di farvi riferimento.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file