다운로드 한 파일이 완전한지 또는 손상되었는지 확인할 수있는 명령 줄 방법이 있습니까?


13

파일을 다운로드하고 조작하는 스크립트를 작성 중이며 파일을 작업하기 전에 파일이 불완전하지 않은지 확인하고 싶습니다 (예 : 연결 끊김으로 인해).

답변:


10

다운로드 한 파일의 무결성을 확인하는 가장 일반적인 방법은 MD5 체크섬을 사용하는 것입니다. 이것은 다운로드 한 사이트가 실제로 게시 된 MD5 체크섬 파일의 파일이라고 가정합니다. 다운로드 한 파일의 고유 한 체크섬을 만들어 게시 된 체크섬과 비교하여 MD5 체크섬을 확인할 수 있습니다. 파일이 동일하면 다운로드 한 파일이 완료되었으며 변경되지 않은 것입니다.

다운로드하는 파일이 변경 될 것으로 예상하지 않으면 체크섬을 미리 계산하여이를 스크립트에 하드 코딩 할 수 있지만 파일이 업데이트되면 확인에 실패합니다.

파일 실행의 MD5 체크섬을 만들려면 md5sum myFile. wget의 경우, 특히 다운로드중인 파일이 큰 경우이 명령이 유용 할 수 있습니다.

wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM.

다운로드하는 동안 "myFile"체크섬을 생성하여 파일 MD5SUM에 저장하면 시간을 절약 할 수 있습니다.

연결이 끊어진 경우 wget의 종료 코드를 확인하는 것이 가장 좋은 방법이라고 생각합니다. 오류없이 다운로드에 성공하면 wget이 반환 0됩니다. 다른 것은 무언가 잘못되었음을 나타냅니다. 의 "종료 상태"섹션을보십시오 man wget.



7

파일을 다운로드하는 데 사용 된 명령의 리턴 코드는 명령이 성공적으로 실행되었는지 여부를 알려줍니다. 일반적으로 리턴 코드 0은 성공을 나타내고 0이 아닌 숫자는 오류를 나타냅니다. $?변수를 통해 리턴 코드에 액세스 할 수 있습니다 .

사용하는 기본 예 wget는 다음과 같습니다.

#!/bin/bash

wget foo.tgz &> /dev/null

if [[ "$?" != 0 ]]; then
    echo "Error downloading file"
else
    echo "Success"
fi

&> /dev/null모든 wget의 출력을 리디렉션 /dev/null하여 스크립팅에 이상적이지만 디버깅 wget오류를보다 어렵게 만듭니다.


4
대신에 :wget -q ... || { handle ; error ; }
mikeserv

@mikeserv 저기, 멋진 터치를 몰랐어요
크릭

1
man답변을 읽는 동안에 만 찾았 으며 두 가지 대답에 이미 두 가지 언급이 있었으므로 두 가지 의견을 제시했습니다. 당신에게도 좋은 연락.
mikeserv 2016 년

tor과 같은 SOCKS 프록시와 함께 사용할 때 이것이 작동하지 않을 것으로 기대합니다.
코드 InChaos

1
@Creek 내가 의미하는 바는 wget다운로드가 중단 된 경우에도 다운로드가 완료된 것으로 생각할 수 있다는 것입니다. 닫힌 TCP 연결 대 닫힌 TCP 연결에 대한 정보를 프록시로 설정합니다. HTTP는 기본적으로 닫힌 TCP를 종료 표시로 사용하므로 HTTP에 문제가 있습니다. 그래서 대량 다운로드를 실행했을 때 헤더의 파일 크기가 다운로드 한 파일 크기와 일치하는지 확인했습니다. wget이러한 일관성 검사를 수행하는지 또는이 문제에 대한 http 사양이 무엇인지 확실 하지 않습니다.
코드 InChaos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.