Faz download do lote e salva links com falha

1

É possível usar o wget para baixar vários arquivos de um arquivo de texto e salvá-lo da URL de qualquer falha nos downloads para um arquivo de texto diferente?

Eu uso scripts wget bash para baixar arquivos de um arquivo de texto como este:

wget -i "/home/user/downloadURLs.txt"

downloadURLs.txt contém uma URL para download por linha:

http://[website].com/file1
http://[website].com/file2
http://[website].com/file3
http://[website].com/file4

Se um dos arquivos não for baixado, eu gostaria de ter o URL com falha salvo em um arquivo separado. Mas ao fazer o download usando a opção -i do wget, eu acho que o código de saída seria 0 se todos os downloads fossem bem-sucedidos ou um código de saída de erro se algum dos downloads falhasse. Se não conseguir um código de saída para cada URL individual, não será possível salvar apenas os URLs com falha.

Acho que isso funcionaria:

#!/bin/bash

#map lines of text file to an array
mapfile -t inputUrls < "/home/user/downloadURLs.txt"

for url in ${inputUrls[@]}
do
    wget "$url"

    if [[ $? != 0 ]]
    "$url" >> "/home/user/failedDownloads.txt"
    fi
done

O motivo pelo qual não estou certo de que quero fazer isso é porque ao fazer o download de vários arquivos de um site, o wget costuma dizer "Reutilizando a conexão existente para [website]". Parece que esse comportamento se destina a acelerar os downloads de um site, e presumo que a otimização seja perdida se o wget for chamado separadamente para cada URL.

Estou correto em pensar que o wget é capaz de baixar de forma mais eficiente se um arquivo de entrada com -i é usado?

Se eu estiver correto, como posso baixar URLs de um arquivo de texto e salvar as URLs com falha em um arquivo separado, enquanto ainda estiver usando as otimizações do wget? Obrigado a todos por qualquer insight aqui.

    
por InverseTelecine 15.11.2016 / 21:54

1 resposta

1

por que não redirecionar simplesmente o stderr ?

$ wget -i test.txt 2> wget-fail.log

$ cat  wget-fail.log 
--2016-11-15 22:06:50--  http://failing-host.com/
Auflösen des Hostnamen »failing-host.com (failing-host.com)«... fehlgeschlagen: Der Name oder der Dienst ist nicht bekannt.
wget: kann die Host-Adresse »failing-host.com« nicht auflösen

[editar]

I do have a logging function set up in the bash script to create a log, which saves both stdout and stderr. Just using 2> seems to create a log file with a similarly huge amount of information in it, including successful downloads. I could approach the problem from the angle of parsing the log file,...

não há necessidade de análise:

$ cat wget.sh 
#!/bin/bash
echo log to stdout
echo >&2 log to stderr
wget -i test.txt 2> wget-fail.log

$ sh wget.sh  &> script.log

$ cat script.log 
log to stdout
log to stderr

$ cat wget-fail.log 
--2016-11-15 23:02:00--  http://failing-host.com/
Auflösen des Hostnamen »failing-host.com (failing-host.com)«... fehlgeschlagen: Der Name oder der Dienst ist nicht bekannt.
wget: kann die Host-Adresse »failing-host.com« nicht auflösen
    
por 15.11.2016 / 22:09

Tags