web-dev-qa-db-ja.com

wgetでファイルをリストから拒否/除外することはできません

問題はこれです、私は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で特定のファイルを拒否/除外するにはどうすればよいですか?

2
grimgav

Wget、または少なくとも私が持っているバージョンは、これを行うための設備が不十分であるように見えます、--server-responseオプションはまだファイルをダウンロードしているようです。 wgetが重要でない場合は、curlの方が適している可能性があります。

このタイプの問題の解決策には、サーバーから返されたContent-Typeを調べることが含まれます。例えば:

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

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

その結果をgrepでフィルタリングすると、許容可能なmimeタイプをテストできます。次に、アプローチを一般化して、ファイルのリストの有効な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'
1
Andrew Walker