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

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

파일 다운로드 및 조작과 관련된 스크립트를 작성 중인데, 파일을 처리하기 전에 파일이 불완전하지 않은지(예: 연결 끊김으로 인해) 확인하고 싶습니다.

답변1

다운로드한 파일의 무결성을 확인하는 가장 일반적인 방법은 MD5 체크섬을 사용하는 것입니다. 이는 다운로드 중인 사이트가 실제로 해당 파일의 MD5 체크섬을 게시한다고 가정합니다. 자체 다운로드 파일 체크섬을 생성하고 이를 게시된 체크섬과 비교하여 MD5 체크섬을 확인할 수 있습니다. 동일하다면 다운로드한 파일이 완전하며 변조되지 않은 것입니다.

다운로드되는 파일이 변경되는 것을 원하지 않으면 체크섬을 미리 계산하고 이를 스크립트에 하드코딩할 수 있습니다. 하지만 파일이 업데이트되면 유효성 검사가 실패합니다.

파일의 MD5 체크섬을 생성하려면 를 실행하세요 md5sum myFile. wget의 경우 특히 다운로드하는 파일이 큰 경우 이 명령이 유용할 수 있습니다.

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

이렇게 하면 다운로드 시 "myFile"의 체크섬이 생성되어 MD5SUM 파일에 저장되므로 시간이 절약될 수 있습니다.

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

답변2

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

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

#!/bin/bash

wget foo.tgz &> /dev/null

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

&> /dev/nullwget의 모든 출력을 로 리디렉션하므로 /dev/null스크립팅에는 적합하지만 wget오류 디버깅이 더 어려워집니다.

관련 정보