Como garantir que a versão mais recente de um arquivo seja baixada completamente, minimizando a transferência de rede

1

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?

    
por Josh Hansen 03.02.2017 / 19:11

1 resposta

1

Você pode usar o sinal -c de wget mesmo se não tiver iniciado o download do arquivo. Isso deve funcionar para o seu propósito:

while ! wget -qc $url; do :; done

Este é um loop infinito, até wget sair com sucesso. Se o arquivo for parcialmente baixado, o loop continua e wget continua de onde parou.

    
por 03.02.2017 / 19:38