중복된 이미지를 동시에 다운로드하는 방법은 무엇입니까?

중복된 이미지를 동시에 다운로드하는 방법은 무엇입니까?

900개의 URL 목록이 있습니다. 각 페이지에는 하나의 이미지가 포함되어 있습니다. 일부 이미지가 중복되었습니다(URL이 동일함). 900장의 사진을 다운로드하고 싶은데,포함하다반복하다.

wget을 사용하여 모든 페이지와 포함된 이미지를 다운로드할 수 있습니다(다른 모든 파일 형식은 무시). 하지만 wget은 이전에 다운로드한 이미지를 "무시"하는 것 같습니다. 900페이지가 있지만 이미지는 약 850개뿐입니다.

(어떻게) wget에게 중복 항목도 다운로드하도록 지시할 수 있나요? 파일 이름에 _1, , ...를 추가할 수 있습니다._2


내 wget 명령:

wget --input-file=urls.txt --output-file=log.txt --wait 1 --random-wait --page-requisites --exclude-domains code.jquery.com --span-hosts --reject thumbnail*.png -P downloadfolder

답변1

내 생각엔 당신의 문제는 --page-requisites. 중복 항목을 식별하고 다시 다운로드하는 것을 방지할 것으로 생각됩니다. 이것은 일반적으로 당신이 원하는 것입니다. 다음과 같이 각 URL에 대해 wget을 한 번씩 호출하고 매번 다른 폴더에 다운로드하면 이 문제를 해결할 수 있습니다.

#!/bin/bash
let i=0
while IFS=$'\n' read url; do 
  let i++; 
  wget -nv -P $i --page-requisites "$url"; 
done < urls.txt

그러나 각 파일에 포함된 이미지는 하나만 필요합니다. 이렇게 하면 트릭을 수행할 수 있습니다.

wget -i urls.txt -q -O - | ...extract image URLs... | wget -nv -i -

HTML에서 URL을 추출하는 것은 축어적인 URL을 찾는 것만큼 간단합니다.

grep -Eo 'http://host/abc/[^"]+.jpg'

아니면 조금 더 노력이 필요합니다. 900개의 URL이 유사한 HTML을 가리키는 경우에는 문제가 되지 않습니다. 어쨌든 이름이 충돌하는 파일에 번호를 매깁니다.

답변2

중복된 항목을 저장하지 않는 이유는 --page-requisites( -p) 옵션을 사용하고 있기 때문입니다. 명령에 --no-directories( ) 옵션을 추가해 보세요 .-nd

맨페이지에서 (강조는 제가 추가했습니다):

Wget을 실행할 때아니요-N, -nc, -r 또는-피, 동일한 디렉터리에 동일한 파일을 다운로드하면 파일의 원본이 file.1이라는 두 번째 사본과 함께 유지됩니다. 파일을 다시 다운로드하면 세 번째 복사본의 이름은 file.2로 지정됩니다. (이는 -r 또는 -p가 적용되는 경우에도 -nd의 동작입니다.)

답변3

wget은 중복을 무시하지 않으며 덮어쓸 가능성이 높습니다. wget에는 많은 옵션이 있지만 모두 알지는 못하지만 중복된 파일 이름을 구별하기 위해 선택적으로 접미사를 추가하는 옵션이 있다고 생각하지 않습니다. 이 기능을 직접 구축해야 합니다.

예를 들어

#  mkdir /myarchivedir
#  
#  mkdir /tmp/mytempdir
#  cd /tmp/mytempdir
#  
#  i=1
#  while [ $i -le 900 ] 
#  do
#  wget http://mysite.com/somefile
#  file=$(ls)
#  mv $file /myarchivedir/${i}.${file}
#  (( i=$i+1 ))
#  done

보시다시피, $file 변수는 이전의 다른 변수와 동일하더라도 매번 값을 변경하기 때문에 파일을 /myarchivedir로 이동하면 중복된 이름의 이미지를 덮어쓰지 않습니다.

관련 정보