查找以 yyyy/mm/dd 格式存储的文件

查找以 yyyy/mm/dd 格式存储的文件

我有一个 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

相关内容