원격 파일이 로컬 파일보다 최신이 아닌 경우 wget에서 상태 오류 받기

원격 파일이 로컬 파일보다 최신이 아닌 경우 wget에서 상태 오류 받기

wget -c http://example.com/foo파일을 정기적으로 업데이트할 때 wget마지막 다운로드 이후 파일이 업데이트되지 않은 경우 오류 상태를 확인할 수 있는 방법이 있습니까?

그것은 다음과 같습니다:

$ wget --give-error-if-file-is-not-updated -c http://example.com/foo
$ echo $?
1

답변1

wget --timestamping파일은 원격 타임스탬프 변경 여부에 따라 조건부로 다운로드되지만 종료 코드는 0어느 쪽이든 가능합니다. 이것은 당신이 요구한 것을 얻게 되었음을 보여줍니다. 테스트 종료 코드는 구문 및 프로토콜 오류만 감지할 수 있습니다.

대신, 이전과 이후의 파일 날짜를 확인하여 파일이 마지막으로 다운로드된 이후 업데이트되지 않았는지 확인하세요. 다음 셸 스크립트 조각은 이를 필요한 종료 코드로 변환하는 방법을 보여줍니다.

OLD=` date -r$FILE +%s 2>/dev/null `  # capture age of file before
wget --timestamping $FILE || exit $?  # update file, die on error
NEW=` date -r$FILE +%s 2>/dev/null `  # capture age of file after
[ "$NEW" = "$OLD" ] && exit 1         # compare ages, die when they match

이 명령을 실행하면 echo $?실패할 때 종료 코드가 표시되고, 성공했지만 파일이 일치할 때도 계속 표시됩니다.wgetwget1wget

표현식의 값 date -r$FILE +%s 2>/dev/null$FILE에포크 이후의 초 수이거나 정보가 없는 경우(예: 파일이 누락된 경우) 빈 문자열입니다. 비교하고 싶을 때 편리한 형태입니다.

--timestamping코드 조각에는 이 옵션이 필요하지 않습니다. 이는 wget이 옵션 사용 여부에 관계없이 로컬 파일 타임스탬프가 원격 파일 타임스탬프와 일치하도록 설정되어 있기 때문입니다 . 이 옵션은 wget원격 파일이 변경되지 않은 경우에만 중복 파일 전송을 방지합니다.

답변2

Wget은 이 기능을 "타임스탬프"라고 부릅니다. 에 기록되어 있어요https://www.gnu.org/software/wget/manual/wget.html#Time_002d스탬핑. 이를 사용하려면 명령줄에 -N또는 를 추가하면 됩니다 .--timestampingwget --timestamping -c http://example.com/foo

관련 정보