Con scp
, no.
Si ambos extremos lo tienen, puedes usar rsync -LvzP remoteserver:path/to/file localfile
para transferir un solo archivo.
Puede probar el siguiente enfoque:en lugar de scp usa dd para omitir la parte descargada y agregar el resto al archivo.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Posible optimización:trabajar con grandes bloques. Dejemos esto como tarea.
Sí, hay formas de reanudar desde el punto de interrupción, pero no es posible usar scp. sftp reget filename
hace lo que necesitas Yarek y Grawity han proporcionado soluciones válidas que doy +1 a ambos, pero para reanudar desde un punto de interrupción, me gusta rsync. Los comandos de ejemplo proporcionados suponen que está recuperando un archivo de un servidor remoto a su estación de trabajo local (descarga). Tenga en cuenta que los dos últimos parámetros deben considerarse source_file y target_file en ese orden. La sintaxis del nombre de archivo varía en función de si el archivo de origen o de destino es local o remoto. Si estuviera enviando (cargando) archivos [de texto], reescribiría los ejemplos provistos como:
#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"
Y a la solución rsync, agrego -e ssh
. Debe considerar si necesita o no verbosidad, compresión, preservar la propiedad, permisos, marca de tiempo, directorios recursivos, etc. Consulte las páginas del manual y Google, con respecto al parámetro -L. Es posible que desee que los enlaces simbólicos permanezcan como enlaces en lugar de hacer referencia a ellos.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file