Estou procurando um comando shell que garanta que um arquivo seja completamente baixado, mas que evita fazer o download de qualquer coisa desnecessariamente. Aqui está o pseudocódigo do que eu espero:
If file doesn't exist, download it.
If file exists:
use HTTP HEAD to get timestamp and size of remote file.
if remote timestamp is newer, delete local file and download remote file
if timestamps are the same:
if remote size is greater than local size:
resume download
if remote size is equal to local size:
do nothing
if remote size is less than local size:
do nothing but issue a warning because this is weird
wget
é capaz de retomar as transferências interrompidas usando a opção -c
, mas eu tenho que rastrear algum lugar que foi interrompido para que eu saiba passar nessa opção, e requer a execução do comando novamente.
wget -N
evita o download de um arquivo se o registro de data e hora do arquivo remoto não for mais recente que o local. Mas não sabe se as transferências foram interrompidas e, portanto, não farão nada quando forem chamadas novamente em uma transferência interrompida.
curl -C -
fará o download de um arquivo, se não estiver presente, e o retomará, se baixado apenas parcialmente. Mas se um arquivo completamente baixado estiver presente, ele me dará erros sobre o servidor não suportar intervalos de byte.
Eu suponho que eu poderia escrever algo para implementar o meu pseudocódigo, mas parece que seria um desejo bastante comum que eu pergunte, existe uma forma existente de fazer isso?