Preciso fazer o download de um arquivo de um servidor HTTP, mas apenas se ele tiver sido alterado desde a última vez que o baixei (por exemplo, através do If-Modified-Since
cabeçalho). Também preciso usar um nome personalizado para o arquivo no meu disco.
Que ferramenta posso usar para esta tarefa no linux?
wget -N
não pode ser usado porque -N
não pode ser usado com -O
.
Respostas:
Considere usar em
curl
vez dewget
:man curl
diz:Se
$file
não existir necessariamente, você precisará-z
condicionar o uso do sinalizador, usandotest -e "$file"
:(Observe que não citamos a expansão
$zflag
daqui, pois queremos que ela seja dividida em 0 ou 2 tokens).Se o seu shell suportar matrizes (por exemplo, Bash), teremos uma versão mais segura e mais limpa:
fonte
A opção wget
-N
somente obtém o arquivo se tiver sido alterado, portanto, uma abordagem possível seria usar a-N
opção simples que obterá o arquivo se necessário, mas o deixará com o nome errado. Em seguida, crie um link físico usando oln -P
comando para vinculá-lo a um "arquivo" com o nome correto. O arquivo vinculado possui os mesmos metadados que o original.A única limitação é que você não pode ter links físicos através dos limites do sistema de arquivos.
fonte
Script Python 3.5+ para encapsular o comando curl:
fonte
chain
:)Uma abordagem semelhante à " verificação de data " (com "curl --time-cond") seria fazer o download de acordo com a comparação do tamanho do arquivo, ou seja, fazer o download apenas se o arquivo local tiver um tamanho diferente do arquivo remoto .
É útil, por exemplo, quando o processo de download falha no meio e, portanto, o arquivo baixado local obtém uma data mais recente que o arquivo remoto, mas na verdade está corrompido e é necessário fazer o download novamente:
A opção "curl -z / --time-cond" (sugerida em outra resposta) não fará o download do arquivo remoto nesse caso (porque o arquivo local tem uma data mais recente), mas esse script de " verificação de tamanho " fará!
fonte