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로 이동하면 중복된 이름의 이미지를 덮어쓰지 않습니다.