문제는 이것입니다 .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
합니까?
답변
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'