Reanudar descarga incompleta con wget y cURL

En el caso de tener problemas a mitad de descarga de un archivo con wget o cURL, podemos reanudar la descarga en lugar de empezar a bajar de nuevo el archivo desde 0.

Reanudar descarga con wget

Vamos a ver el ejemplo práctico con wget. Iniciamos una descarga como lo haríamos normalmente, wget seguido de la URL:

$ wget http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso
--2014-09-19 11:52:40--  http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso
Resolving mirror.codigo23.net... 212.89.9.154
Connecting to mirror.codigo23.net|212.89.9.154|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8787968 (8,4M) [application/octet-stream]
Saving to: `cd55.iso'

20% [=======================================>                                                                                                                                                              ] 1.793.752   1,05M/s              ^C

Como podéis ver, he cancelado la descarga con un CTRL + C cuando se encontraba al 20%. Es lo mismo que si por lo que sea perdemos la conexión a Internet, se apaga el equipo en el que estamos descargando, etc. Si hacemos un ls vemos el archivo incompleto:

$ ls -ltrh
-rw-r--r-- 1 alex alex 1,9M 2014-09-19 18:52 cd55.iso

¿Cómo puedo reanudar la descarga sin empezar desde el principio? Si usaramos «wget + URL» de nuevo, la descarga comenzaría de 0. En cambio, si usamos el parámetro «–continue» o «-c» wget continúa donde lo habíamos dejado. Se puede observar la diferencia en la barra de progreso del contenido que ya estaba descargado «++++++» del que se está descargando «======»:

$ wget --continue http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso
--2014-09-19 11:53:16--  http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso
Resolving mirror.codigo23.net... 212.89.9.154
Connecting to mirror.codigo23.net|212.89.9.154|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 8787968 (8,4M), 6821904 (6,5M) remaining [application/octet-stream]
Saving to: `cd55.iso'

77% [++++++++++++++++++++++=========================>       ] 6.843.952    557K/s  eta 2s

Reanudar descarga con cURL

Vamos a descargar el mismo archivo que antes pero con cURL, cortando la descarga antes de finalizar:

$ curl http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso -O
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 30 8582k   30 2590k    0     0   796k      0  0:00:10  0:00:03  0:00:07  807k
^C

Para reanudar la descarga, en lugar de volver a utilizar «cURL + URL + Archivo de destino» tenemos varias opciones. Una es poco usable ya que requiere especificar el offset (número de bytes a partir del cual empezar a descargar):

-C/--continue-at  Resumed transfer offset
$ curl -C 10231 http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso -O cd55.iso

Vamos a hacerlo sencillo y que el offset se calcule automáticamente, para ello usamos «-C -«:

$ curl -C - http://mirror.codigo23.net/pub/OpenBSD/5.5/amd64/cd55.iso -O
** Resuming transfer from byte position 4481024
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 4206k  100 4206k    0     0  1875k      0  0:00:02  0:00:02 --:--:-- 1917k

Si os fijáis en la salida del comando, indica lo siguiente:

** Resuming transfer from byte position 4481024

Así que ya sabéis, a ahorrar ancho de banda, transferencia de datos y tiempo cuando descargáis archivos grandes y se os corta la descarga a mitad.