Respuestas:
Puede probar la siguiente aproximación: en lugar de scp, use 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.
dd
con bloques pequeños puede ser lento (solo 350 kB / s aquí). Afortunadamente, las scp
transferencias parecen venir en bloques de 1024 bytes. Si es así para su archivo (o de lo contrario, truncando al bloque más cercano 1024 bytes), que puede acelerar de esta manera: ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (¡Tenga en cuenta que $sofar
entonces debe ser el número de bloques de 1024 bytes para omitir!)
rsys
en la segunda línea hay solo un nombre de host de ejemplo, no un argumento especial para ello ssh
. Le sugiero que lo reemplace user@host
para evitar confusiones.
Con scp
no.
Si ambos extremos lo tienen, puede usar rsync -LvzP remoteserver:path/to/file localfile
para transferir un solo archivo.
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 I +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 (descargando). Tenga en cuenta que los dos parámetros finales 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], volvería a escribir los ejemplos proporcionados como:
# De local a remoto sofar = `ssh remote_system ls -l archivo_interrumpido | awk '{print $ 5}' '; dd if = archivo_origen 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 recurrentes, etc. Verifique las páginas man 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
scp -o ConnectTimeout 60
Le permite especificar el tiempo de espera para una conexión. Puede evitar que su conexión se rompa.
Sí, si ambos extremos admiten sftp: después de un scp remoteuser@remotehost:/absolute/filename .
error, puede continuar haciendo sftp remoteuser@remotehost
y luego reget /absolute/filename
reanudar la descarga.