【问题标题】:Yesterday's date variable in BASH on AIX ServerAIX 服务器上 BASH 中昨天的日期变量
【发布时间】: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


【解决方案1】:

由于 DST,它可能并不总是正确的,尽管这不是一个大问题。 你可以说:

yesterday=$(date -d yesterday +%Y%m%d)

【讨论】:

  • 我收到date: not recognized flag d
  • 对不起...我刚刚了解到 AIX date(1) 不接受 -d 选项。您的第一种方法 $(TZ=GMT+28 date +%Y%m%d) 应该可以正常工作,除了午夜左右。修改 TZ 是计算偏移时间和日期的常用解决方法。
【解决方案2】:

你尝试过

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)

我认为它有效。

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多