list_of_urls
다음과 같이 가정 하십시오.
http://www.url1.com/some.txt
나는 그것을 사용하는 방법을 알고있다 :
wget -i list_of_urls
그러나 내 list_of_urls
파일이 있으면 PDF 또는 비디오와 같은 적절한 파일을 반환합니다.
http://www.url1.com/app?q=123&gibb=erish&gar=ble
http://www.url2.com/app?q=111&wha=tcha&mac=allit
단일 파일의 경우 다음을 수행 할 수 있습니다.
wget -O some.txt "http://www.url1.com/app?q=123&gibb=erish&gar=ble"
어떻게 사용합니까 wget
적절한 로컬 파일로 반환 된 데이터를하는 URL의 목록을 다운로드하고 저장?
답변
기본적으로 wget은 이름이 전달한 URL의 마지막 구성 요소 인 파일에 기록합니다. 많은 서버가 http://www.url1.com/app?q=123&gibb=erish&gar=ble
와 같은 멋진 파일 이름을 가진 다른 URL로 URL을 리디렉션합니다 http://download.url1.com/files/something.pdf
. 옵션 을 전달하는 something.pdf
대신 경로 재 지정된 URL (예 :)에서 이름을 사용하도록 wget에 지시 할 수 있습니다 . 부주의하게 사용하면 현재 디렉토리에서 예측할 수없는 파일 이름을 덮어 쓸 수 있으므로 기본 모드는 아닙니다. 그러나 서버를 신뢰하거나 다른 중요한 파일이없는 디렉토리에서 작업하는 경우 일반적으로 사용하는 것이 좋습니다.app?q=123&gibb=erish&gar=ble
--trust-server-names
--trust-server-names
일부 서버 Content-Disposition
는 리디렉션 대신 헤더를 사용하여 파일 이름을 지정합니다. 패스 --content-disposition
이 파일 이름을 사용 wget을하려면 옵션을 선택합니다.
그러므로:
wget --content-disposition --trust-server-names -i list_of_urls
그래도 멋진 파일 이름을 얻지 못하면 직접 지정할 수 있습니다. 다음과 같은 줄을 포함하는 파일이 있다고 가정하십시오.
http://www.url1.com/app?q=123&gibb=erish&gar=ble foo.pdf
http://www.url2.com/app?q=111&wha=tcha&mac=allit bar.txt
URL 또는 파일 이름에 공백 문자가 없다고 가정하고 wget이 파일을 지정된 파일 이름으로 다운로드하도록하려면 다음을 수행하십시오.
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
err
모든 다운로드가 성공했을 경우 1, 그렇지 않으면 당신이 할 수 변수는 0을 포함 return $err
하면 기능이 조각을 넣어 경우 또는 exit $err
당신은 문자열이 조각을 넣어합니다.
URL 이외의 다른 것을 지정하지 않고 서버에서 멋진 이름을 얻을 수없는 경우 파일 형식을 추측하고 최소한 의미있는 확장자를 얻으려고 시도 할 수 있습니다.
err=0
n=1
while read -r url; do
if wget -O tmpfile "$url"; then
ext=data
case $(file -i tmpfile) in
application/pdf) ext=pdf;;
image/jpeg) ext=jpg;;
text/html) ext=html;;
text/*) ext=txt;;
esac
mv tmpfile "$n.$ext"
else
err=1
fi
n=$((n+1))
done
원하는대로 다른 유형을 추가하십시오. 귀하의 경우 file
명령이없는 -m
옵션을, 그것을두고을 확인할 file
관심있는 파일 형식의 파일 시스템에 반환. 당신이 파일이있는 경우 /etc/mime.types
시스템에를, 당신의 확장에 MIME 타입의 연결을 읽을 수 있습니다 자신의 목록을 제공하는 대신
n=1
while read -r url; do
if wget -O tmpfile "$url"; then
mime_type=$(file -m tmpfile)
ext=$(awk "$1 == \"$mime_type\" {print \$2; exit} END {print \"data\"}" /etc/mime.types)
mv tmpfile "$n.$ext"
else
err=1
fi
n=$((n+1))
done
답변
의 항목을 반복 할 수 있습니다 list_of_urls
. 이 같은:
while read -r url; do
wget -O foo $url
done < list_of_urls
foo
각 항목에 대해 고유 한 결정 방법을 추가해야 합니다 list_of_urls
(또한 디스크에있는 파일이라고 가정합니다).
답변
wget
옵션을 직접 사용할 수 있습니다 .
wget -r -i list_of_urls