Ignorar o download se houver arquivos no wget?


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

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.


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.