Ignorar o download se houver arquivos no wget?

198

Este é o exemplo mais simples da execução do wget:

wget http://www.example.com/images/misc/pic.png

mas como fazer o wget pular o download, se pic.pngjá estiver disponível?

nais inpoh gan
fonte

Respostas:

269

Tente o seguinte parâmetro:

-nc, --no-clobber: pule os downloads que seriam baixados para os arquivos existentes.

Uso da amostra:

wget -nc http://example.com/pic.png
plundra
fonte
34
-ncnão impede o envio da solicitação HTTP e o subsequente download do arquivo. Ele simplesmente não faz nada após o download do arquivo, se o arquivo já tiver sido totalmente recuperado. Existe alguma maneira de impedir a solicitação HTTP se o arquivo já existir? stackoverflow.com/questions/33203898/...
ma11hew28
8
Como observado na pergunta vinculada, eu discordo - Se nenhum clobber for usado e o nome do arquivo existir, ele será encerrado. Nenhum pedido HEAD mesmo. Mesmo que este não era o caso, verifique se você tem um arquivo para começar :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra
3
Acho que estou obtendo resultados diferentes porque estou usando a --recursiveopção
ma11hew28
197

A opção -nc, --no-clobbernão é a melhor solução, pois os arquivos mais recentes não serão baixados. Em -Nvez disso, deve-se usar o que fará o download e substituirá o arquivo se o servidor tiver uma versão mais recente; portanto, a resposta correta é:

wget -N http://www.example.com/images/misc/pic.png

Em seguida, executando o Wget com -N, com ou sem -rou -p, a decisão de baixar ou não uma cópia mais recente de um arquivo depende do carimbo de data e hora local e remoto e do tamanho do arquivo. -ncpode não ser especificado ao mesmo tempo que -N.

-N, --timestamping: Ligue selo de tempo.

Daniel Sokolowski
fonte
39
Quando o servidor não estiver configurado corretamente, -Npoderá falhar e o wget sempre fará o download novamente. Então, às vezes, -ncé a melhor solução.
usuário
2
qual poderia ser o cenário aplicável em que 'Quando o servidor não está configurado corretamente' ocorreria?
AjayKumarBasuthkar
quando você estiver baixando de um local que foi copiado, alterando todos os carimbos de data e hora.
Robert
Se isso é melhor depende do contexto. Por exemplo, estou baixando ~ 1600 arquivos de uma lista e atualizei a lista para incluir mais alguns arquivos. Os arquivos não mudam, então não me importo com a versão mais recente e não quero que ele verifique se há novas versões dos arquivos 1600 que já existem no servidor.
JBentley #
2
@AjayKumarBasuthkar: Quando o servidor não suportar nenhuma maneira de verificar se há arquivos mais recentes, wgetele reclamará Last-modified header missing; essa é exatamente a situação descrita.
Piskvor saiu do prédio
23

Ao executar o Wget com -rou -p, mas sem -N, -ndou-nc , o download de um arquivo resultará na nova cópia simplesmente substituindo a antiga.

Portanto, a adição -ncimpedirá esse comportamento, fazendo com que a versão original seja preservada e que quaisquer cópias mais recentes no servidor sejam ignoradas.

Veja mais informações no GNU.

Mahesh
fonte
18

A resposta que eu estava procurando está em https://unix.stackexchange.com/a/9557/114862 .

O uso do -csinalizador quando o arquivo local tiver tamanho maior ou igual à versão do servidor evitará o download novamente.

jsta
fonte
1
Isso é especialmente bom quando você está baixando um monte de arquivos com o sinalizador -i. wget -i filelist.txt -ccontinuará um download com falha de uma lista de arquivos.
Trevor