无法让 wget 从列表中拒绝/排除文件

无法让 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 链接.txt

但这没有效果,wget仍然会获取png文件和其他文件。管道传输links.txt不是grep一种选择,因为在实际文件中,链接是这种形式http://example.com/get/123987562,然后被解析/重定向到类似http://example.com/media/images/cool-pic.jpg

所以问题是,我如何使用来拒绝/排除某些文件wget

答案1

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 类型。整理它并将其放入 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

你可以这样调用:

mimechecker links.txt 'image/png'

相关内容