Не могу заставить wget отклонять / исключать файлы из списка

2

Проблема в том, что у меня есть файл со списком URL, скажем 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

Я пытаюсь дать wgetпонять, что не хочу, чтобы это выглядело pngтак:

$ wget -R png -i links.txt

Но это не имеет никакого эффекта и wgetвсе равно получает pngфайлы вместе с другими. Передача links.txtпо конвейеру grepне является опцией, так как в реальном файле ссылки находятся в этой форме, http://example.com/get/123987562которая затем разрешается / перенаправляется в нечто вродеhttp://example.com/media/images/cool-pic.jpg

Итак, вопрос в том, как я могу отклонить / исключить определенные файлы wget?

grimgav
источник
Важен ли порядок? Попробуйтеwget -i links.txt -R png
Кусалананда
Нету. Заказ не важен.
Grimgav

Ответы:

1

Wget или, по крайней мере, версия, которая у меня есть, кажется, плохо оборудована для этого, --server-responseопция все равно, кажется, загружает файл. Если wget не критичен, то лучше использовать curl.

Решение проблемы такого типа включает просмотр Content-Type, возвращаемого сервером. Например:

curl -I http://www.tipsfor.us/wp-content/uploads/2009/01/vim-editor-icon.png

пишет что-то вроде следующего на стандартный вывод

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

Фильтрация этого результата с помощью grep позволяет вам проверять приемлемые типы пантомимы. Затем вы можете обобщить подход для проверки допустимых типов MIME для списков файлов. Убираем это и помещаем в скрипт оболочки:

#!/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

Который вы бы назвали так:

mimechecker links.txt 'image/png'
Эндрю Уокер
источник
Отличная идея, спасибо, что поделились и ответили на мой вопрос. Это действительно помогло.
Grimgav