У Curl уже есть возможность возобновить загрузку. Просто беги так:
$> curl -C - $url -o $output_file
Конечно, это не определит, когда остановиться, по сути. Однако было бы довольно легко написать оболочку. Примерно так:
#!/bin/bash
url="http://someurl/somefile"
out="outfile"
touch "$out"
last_size=-1
while [ "`du -b $out | sed 's/\W.*//'`" -ne "$last_size" ]; do
curl -C - "$url" -o "$out"
last_size=`du -b $out | sed 's/\W.*//'`
done
Следует отметить, что curl выдает забавную ошибку:
curl: (18) transfer closed with outstanding read data remaining
Однако я проверил это на довольно большом ISO-файле, и md5 все еще соответствовал, хотя была показана вышеупомянутая ошибка.