URL 목록과 해당 출력 파일과 함께 wget을 어떻게 사용합니까?


35

list_of_urls다음과 같이 가정 하십시오.

http://www.url1.com/some.txt
http://www.url2.com/video.mp4

나는 그것을 사용하는 방법을 알고있다 :

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의 목록을 다운로드하고 저장?

답변:


33

기본적으로 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

2

의 항목을 반복 할 수 있습니다 list_of_urls. 이 같은:

while read -r url; do
    wget -O foo $url
done < list_of_urls

foo각 항목에 대해 고유 한 결정 방법을 추가해야 합니다 list_of_urls(또한 디스크에있는 파일이라고 가정합니다).


이에 대한 변형은 다음과 같습니다 wget -O $2 $1. 한 줄로 작은 스크립트를 만듭니다 . list_of_urls 파일에서 각 줄을 url, 공백, 파일 이름으로 http://url1/blah&blah=whatever some.pdf만듭니다 (예 : 위와 동일하게 wget 줄을으로 바꿉니다 ./thatscript.sh $url.이 경우 $url실제로 url과 파일 이름을 가진 줄입니다.
goldilocks

2
변형 2 : url과 파일 이름을 list_of_urls 파일의 별도의 줄에 놓고을 사용하십시오 while read url; do read filename; wget -O $filename $url; done < list_of_urls.
goldilocks

2

wget옵션을 직접 사용할 수 있습니다 .

wget -r -i list_of_urls

작동하지 않습니다 : -r재귀 다운로드를 활성화합니다. 파일 이름이 올바르게 설정되지 않았습니다.
jofel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.