Wget, ou pelo menos a versão que tenho aparece mal equipada para fazer isso, a opção --server-response
ainda parece baixar o arquivo. Se wget não é crítico, então o curl pode ser uma opção melhor.
A solução para esse tipo de problema envolve examinar o Content-Type retornado pelo servidor. Por exemplo:
curl -I http://www.tipsfor.us/wp-content/uploads/2009/01/vim-editor-icon.png
escreve algo como o seguinte no stdout
http://www.tipsfor.us/wp-content/uploads/2009/01/vim-editor-icon.png
HTTP/1.1 200 OK
Server: nginx admin
Date: Thu, 03 Nov 2011 09:22:55 GMT
Content-Type: image/png
Content-Length: 35765
Last-Modified: Wed, 13 Apr 2011 05:19:19 GMT
Connection: keep-alive
Vary: Accept-Encoding
Expires: Thu, 10 Nov 2011 09:22:55 GMT
Cache-Control: max-age=604800
X-Cache: HIT from Backend
Accept-Ranges: bytes
Filtrar esse resultado com o grep permite testar tipos mime aceitáveis. Você pode então generalizar a abordagem para verificar tipos válidos de mime para listas de arquivos. Arrumando isso e colocando em um script de shell:
#!/bin/bash
# in mimechecker.sh
LINKFILE=$1
PATTERN=$2
function mimefilter {
URL=$1
PATTERN=$2
curl -sI $URL | egrep ${PATTERN} > /dev/null 2>&1
if [ "$?" -eq "0" ] ; then
wget $URL
fi
}
(
while read line
do
mimefilter $line $PATTERN
done
) < $LINKFILE
Qual você chamaria desta maneira:
mimechecker links.txt 'image/png'