【发布时间】:2021-07-15 05:17:12
【问题描述】:
#!/bin/bash
ctime=date +%s # returns 1618634997 to $ctime
stime=$(wget --server-response --spider http://www.server.org/news_32.mp3 2>&1 | grep -i Last-Modified)
# returns : Last-Modified: Sat, 17 Apr 2021 04:49:57 GMT
# into the variable $stime
我需要将$stime转换为纪元时间,放入$etime进行比较,然后决定是否下载文件。
需要一些代码来操作字符串。
做日期比较
diff=$(( (ctime - eftime) / 86400 ))
echo $diff
以天为单位返回差异。
我的解决方案,经过多次尝试分解原始字符串后发现
stime=$(wget --server-response --spider http://server.org.au/local.mp3 2>&1 | grep -i Last-Modified)
a=$stime
a=${a/*,/} ; a=${a/\ GMT/} ; dmt=${a/2021 /} ; dm=${a/2021*/} ; tm=${dmt/????????/} ; dd=${dm%?????*} ; mmm=${dm#*????}
fst="${mmm}${dd} ${tm}"
epoch=$(date -d "${fst}" +"%s")
echo "server file time = $fst"
ftime=$epoch
ctime=date +%s``
diff=$(( (ctime - ftime) / 86400 ))
echo "age "$diff" days"
exit
很尴尬,我知道 :) 感谢您的回答,对这个网站非常陌生,现在尝试简单的方法。
【问题讨论】:
-
如果您使用的是 GNU coreutils,您可以使用 date(1) 的
-d选项,但这可能会给您的用例带来可移植性问题。这是你的选择吗? -
如果没有,Perl 在其标准库中有一个人类可读的日期解析器; stackoverflow.com/questions/7357423/…
标签: bash