재부팅 후에도 wget의 종료 상태를 신뢰할 수 있습니까?

재부팅 후에도 wget의 종료 상태를 신뢰할 수 있습니까?

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-Lengthwget은 해당 바이트 수를 수신할 때만 종료됩니다. 이는 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 파일을 덮어쓰는 것입니다.

관련 정보