wget
다음 명령을 사용하여 작업을 시작했습니다 .
urls=(https://example.com/file1 https://example.com/file2
https://example.com/file3 https://example.com/file4)
for url in ${urls[@]}; do
wget "$url" 2>/dev/null && echo "$url done" >> progress &
done
파일은 각각 30-40G 정도 였기 때문에 밤새도록 실행했습니다. 오늘 다시 확인해 보니 다음과 같습니다.
-rw-rw-r-- 1 a staff 13M Mar 18 15:11 file1
-rw-rw-r-- 1 a staff 18M Mar 18 15:12 file1.1
-rw-rw-r-- 1 a staff 38G Mar 18 21:10 file1.2
-rw-rw-r-- 1 a staff 12M Mar 18 15:12 file2
-rw-rw-r-- 1 a staff 44G Mar 18 21:35 file2.1
-rw-rw-r-- 1 a staff 446 Mar 18 21:35 progress
-rw-rw-r-- 1 a staff 40G Mar 18 21:24 file3.1
-rw-rw-r-- 1 a staff 4.4M Mar 18 15:12 file3
-rw-rw-r-- 1 a staff 6.5M Mar 18 15:12 file4
-rw-rw-r-- 1 a staff 42G Mar 18 21:27 file4.1
즉, filename.N
크기는 적당해 보이지만 filename
파일 자체가 너무 작은 파일이 일부 있습니다. 이 progress
파일은 모든 파일이 성공적으로 다운로드되었음을 보고합니다.
https://example.com/file1 done
https://example.com/file2 done
https://example.com/file3 done
https://example.com/file4 done
filename.N
나는 이 파일을 제공한 사람에게 각 파일의 md5sum을 제공하여 해당 파일이 실제로 전체 복사본 인지 확인할 수 있도록 요청했습니다 . 또한 실제로 문제의 파일의 전체 복사본이라고 안전하게 가정할 수 있는 filename.N
최대값 은 무엇입니까?N
wget
프로세스가 몇 번 다시 시작되었기 때문에 .N
이 파일이 있는 것 같지만 && echo
파일이 작동하는 것 같다는 것은 파일이 올바르게 다운로드되었다는 뜻인가요, 아니면 &&
다운로드가 제대로 수행되었음에도 불구하고 수행되었을 수 있다는 뜻인가요? 불완전한 파일인가요?
답변1
서버에서 보낸 헤더( --server-response
)를 볼 수 있으며 헤더에 포함되어 있으면 Content-Length
wget은 해당 바이트 수를 수신할 때만 종료됩니다. 이는 arg 매뉴얼 페이지에 언급되어 있습니다 --ignore-length
. 하지만 md5 또는 다른 합계는 항상 좋은 생각입니다!
답변2
나의 해석https://www.gnu.org/software/wget/manual/wget.html
'--no-clobber' 동일한 디렉터리에서 파일을 여러 번 다운로드하는 경우 Wget의 동작은 '-nc'를 포함한 여러 옵션에 따라 달라집니다. 경우에 따라 반복 다운로드 중에 로컬 파일이 손상되거나 덮어쓰이게 됩니다. 다른 경우에는 유지됩니다.
"-N", "-nc", "-r" 또는 "-p" 없이 Wget을 실행할 때 동일한 디렉터리에 동일한 파일을 다운로드하면 파일의 원본 복사본이 유지되고 두 번째 복사본은 그대로 유지됩니다. 파일을 다시 다운로드하면 세 번째 복사본의 이름은 'file.2'로 지정됩니다.
... wget은 최신 버전을 .N 파일에 넣으므로 신뢰할 수 있습니다. 배제해야 할 유일한 다른 문제는 WGETRC 또는 기타 전역 wgetrc 파일을 덮어쓰는 것입니다.