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 $?
실패할 때 종료 코드가 표시되고, 성공했지만 파일이 일치할 때도 계속 표시됩니다.wget
wget
1
wget
표현식의 값 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
또는 를 추가하면 됩니다 .--timestamping
wget --timestamping -c http://example.com/foo