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 $?
您将看到退出代码,当成功但文件匹配时您仍然会看到。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_002dStamping。要使用它,只需将-N
或添加--timestamping
到命令行中:wget --timestamping -c http://example.com/foo
。