【发布时间】:2017-10-12 19:26:06
【问题描述】:
我想将昨天的日期存储在 BASH 变量中,以便在文件名通配符搜索中使用该变量搜索昨天的文件。我对美国纽约市 (EST) 时区使用以下格式,并想知道是否保证从系统日期获取昨天的日期;否则我可以对变量进行进一步的更改。
yesterday=$(TZ=GMT+28 date +%Y%m%d)
...
for file in $HOME_DIR/*$yesterday*.txt;
...
HOME_DIR 中的文本文件名如下: "ABC_20171011064612.txt"
更新 1:尝试消除与夏令时相关的问题:
yesterday=$(echo -e "$(TZ=GMT+28 date +%Y%m%d)\n$(TZ=GMT+18 date +%Y%m%d)"|grep -v $(date +%Y%m%d)|sort|tail -1)
1) 将两个日期转换为字符串,即今天日期前的 24 小时和 14 小时(任意选择小于 24 小时)
2) 过滤不是今天的日期
3) 对 2) 中的字符串进行升序排序
4) 将yesterday 变量分配给列表的最后一个tail -1 条目
【问题讨论】:
-
也许试试 Perl...
perl -MPOSIX -le '@now = localtime; $now[3]--; print scalar localtime mktime @now' -
哪个版本的 bash?如果你有 4.3,那么你可以使用
printf %()T使用 shell-builtin 操作进行日期格式化,这样你就可以提取纪元时间然后减去。 -
GNU bash, version 4.3.30(1)-release (powerpc-ibm-aix5.1.0.0) -
问候 Walter A,谢谢,我将尝试该链接中提到的 AIX grep 解决方案来规避夏令时问题。
标签: bash unix-timestamp aix