Se eu executar o wget duas vezes, ele não reconhece que já fez o download desse arquivo e cria um novo. Existe alguma maneira de impedir o download do arquivo novamente?
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...
(É bom usar curl ou uma alternativa semelhante a script, se o wget não puder fazer isso.)
Respostas:
Eu sugiro que você use a
-N
opçãoEle permite o registro de data e hora, que baixa novamente o arquivo se for mais novo no servidor que a versão baixada.
Ressalva (de comentário de KasiyA)
Se o servidor não estiver configurado corretamente, ele poderá sempre relatar que o arquivo é novo e
-N
sempre fará o download novamente do arquivo. Nesse caso,-nc
é provavelmente uma opção melhor.fonte
-N
pode falhar e o wget sempre baixa novamente. Então, às vezes-nc
é melhor que-N
Sim, é
-c
opção.Se o arquivo for o mesmo, a segunda tentativa de download será interrompida.
Advertências (dos comentários de jofel)
Se o arquivo foi alterado no servidor, a
-c
opção pode fornecer resultados incorretos.Com
-c
, o wget simplesmente pede ao servidor quaisquer dados além da parte do arquivo já baixado, nada mais. Ele não verifica se houve alguma alteração na parte do arquivo que já foi baixada. Assim, você pode ter um arquivo corrompido, que é uma mistura do arquivo antigo e do novo.Teste local
Você pode testá-lo executando web-servidor local simples como seguir (graças a @roadmr 's resposta ):
Abra as janelas de um terminal e digite:
Agora abra outro terminal e faça:
Observe que
filename-to-download
é o arquivo localizado no/path/to/parent-download-dir/
qual queremos fazer o download.Agora, se você executar o comando wget por várias vezes, verá:
Ok, agora vá para o
/path/to/parent-download-dir/
diretório e adicione algo ao arquivo de origem, por exemplo, se for um arquivo de texto, adicione uma linha extra simples e salve o arquivo. Agora tente comwget -c ...
. Ótimo, agora você verá o download novamente do arquivo, mas já o baixou antes.Razão: por que fazer novamente o download?
porque seu tamanho mudou para um tamanho maior que o arquivo baixado antigo e nada mais.
fonte
-nc
não como você disse, mas a-c
opção funcionará e é por isso que mencionei a-c
opção primeiro.-c
,wget
solicita ao servidor quaisquer dados além da parte do arquivo já baixado, nada mais. Ele não verifica se há alguma alteração na parte já baixada do arquivo no servidor. Na pior das hipóteses, você obtém um arquivo corrompido, que é uma mistura entre o arquivo antigo e o novo.Também há outra opção chamada
-nc
wgetting:Quando a
-nc
opção é especificada, o Wget se recusará a baixar cópias do mesmo arquivo. Se você tiver o mesmo arquivo quewget
tenta fazer o download, ele se recusará a fazer o download, a menos que você renomeie ou remova o arquivo local.Às vezes, essa opção é muito boa e eu recomendo usar
-nc
opção em vez de ambas-c
ou a-N
opção, porque essas opções substituirão o arquivo de download pelo arquivo local se eles tiverem o mesmo nome.Advertência (do comentário de jofel)
A
-nc
opção não atualiza o arquivo se ele tiver sido alterado no servidor. Se você souber que o arquivo será alterado, a-N
opção é preferível. Se você sabe que o arquivo não será alterado (ou não se importa),-nc
tudo bem.fonte
Eu sei que essa era uma pergunta específica sobre o wget, mas o OP mencionou "Feliz em usar curl ou uma alternativa semelhante a script, se o wget não puder fazer isso". Não sei qual é o requisito aqui (vários arquivos, mantenha a versão antiga, se diferente da original, substitua pela versão recém-baixada). Dependendo do que você deseja e de como deseja manipular as duplicatas, pode ser necessário mais do que isso. Uma maneira muito simples de fazer o que você deseja é simplesmente usar o curl.
Este comando substituirá o arquivo antigo pelo novo, baixado todas as vezes.
Não envie isso para o terminal (sem o "> [nome do arquivo]") se estiver baixando um arquivo binário em vez de texto. Fazer isso poderá interferir com a sua sessão do terminal. No caso de você fazer isso por acidente, pode ser necessário abrir outra sessão do shell / terminal.
fonte