如果远程文件不比本地文件新,则从 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任一方式。这表明你得到了你所要求的。测试退出代码,只能检测语法和协议错误。

相反,通过查看前后的文件日期来检测文件自上次下载以来是否未更新。以下 shell 脚本片段显示了如何将其转换为您要求的退出代码。

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_002dStamping。要使用它,只需将-N或添加--timestamping到命令行中:wget --timestamping -c http://example.com/foo

相关内容