Não é possível fazer com que o wget rejeite / exclua arquivos de uma lista

2

O problema é este, eu tenho um arquivo com uma lista de URLs, digamos links.txt :

http://www.tipsfor.us/wp-content/uploads/2009/01/vim-editor-icon.png
http://wp.psyx.us/wp-content/uploads/2011/01/vi-vim-tutorial-1.gif
http://proft.me/static/img/vim/vi-vim-cheat-sheet.gif

O que eu estou tentando fazer é deixar wget saber que eu não quero que ele obtenha png da seguinte forma:

$ wget -R png -i links.txt

Mas isso não tem efeito e wget ainda obtém png arquivos junto com outros. Piping links.txt a grep não é uma opção como no arquivo real os links estão nesse formato http://example.com/get/123987562 que então é resolvido / redirecionado para algo como http://example.com/media/images/cool-pic.jpg

Então a pergunta é: como rejeitar / excluir determinados arquivos com wget ?

    
por grimgav 03.11.2011 / 09:45

1 resposta

1

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'
    
por 03.11.2011 / 11:07

Tags