我有一个 cron 作业,在凌晨 1 点运行,并以下面的 yyyy/mm/dd 格式创建昨天和当天的 index.html。
我需要抓住第-1 天并发送给用户。我怎样才能做到这一点?
-bash-4.2$ find /var/lib/pgsql/scripts/outfile/ -type f -name index.html
/var/lib/pgsql/scripts/outfile/2022/06/29/index.html
/var/lib/pgsql/scripts/outfile/2022/06/30/index.html
在这种情况下,它将是
/var/lib/pgsql/scripts/outfile/2022/06/29/index.html
我如何使用 bash 脚本来做到这一点?
答案1
显然,您需要一个表达的字符串yesterday
(假设今天2022/06/30
在您的示例中)。
date
这可以由 (GNU)或bash (+4.2) 本身生成date -d yesterday +%Y/%m/%d
:
$ printf "%(%Y/%m/%d)T" "$(($(printf "%(%s)T" -1)-86400))"
2022/06/29
假设一天实际上是 86400 秒,并且 DST 不会干扰这一点。
然后,您将获得文件的整个目录,如下所示:
dir='/var/lib/pgsql/scripts/outfile/'
name='index.html'
yest="$(printf "%(%Y/%m/%d)T" "$(($(printf "%(%s)T" -1)-86400))")"
file="$dir$yest/$name"
[[ -e "$file" ]] || exit 3
echo "$file"
请注意 cron 使用sh
(不是bash
),上面的脚本必须使用bash
或将脚本写入文件并bash /path/to/scriptfile
从 cron调用sh
。