在 AIX 上如何判断一个文件是否超过 30 分钟?

在 AIX 上如何判断一个文件是否超过 30 分钟?

我想用 ksh 或 bash 编写一个 shell 脚本,如果特定文件超过 30 分钟(上次修改时间超过半小时),则以 1 退出。在 Linux 或现代 unix 上很容易,但我必须在 AIX 5.2 版本上执行此操作。

因此限制条件为:

  • ‘find’中没有 -mmin -mmax 选项
  • touch 中没有 -d 选项(touch -d ‘30 分钟前’ temp然后找到!-较新的温度不起作用)
  • 没有“stat”命令
  • ‘date’ 命令中没有 %s 参数(日期 +%s不起作用)
  • 我不被允许安装任何软件

您能帮我一下如何在这些限制条件下做到这一点吗?

答案1

我只需使用、和就可以做到这一点touchtestdate在 AIX 5.3.0.0 上测试)

首先,您需要创建一个 30 分钟前的的文件(不幸的是,这需要事先了解机器上的当前时区。但如果需要的话,您可以将其融入其中。)

在此示例中,当前时区为 EST5EDT (GMT-4)。如果你很幸运,机器时区将设置为 GMT,你只需使用TZ=00:30

-bash-3.00# date
Mon 26 Mar 14:22:31 2012
-bash-3.00# touch -t `TZ=04:30 date '+%Y%m%d%H%M.%S'` foo
-bash-3.00# ls -al foo
-rw-r--r--   1 root     system            0 26 Mar 13:52 foo

现在使用测试来比较日期:

-bash-3.00# test '/smit.log' -ot foo && echo 'smit.log is older than 30min'
smit.log is older than 30min

答案2

使用ls

ls -l列出文件的最后修改时间。您可以使用或
剖析输出,然后解析日期。awkcut

请注意,在 AIX 上(与大多数 *nix 系统一样),提供的日期格式取决于ls文件上次修改的时间。请参阅文档了解具体情况。

答案3

如果您有基础知识,bash/tsh 和 sed。您可以编写一个简单的脚本来测试与 ls 输出相关的文件时间:

#/bin/bash

LSOUTPUT=`ls -l`
IFS='
'

for f in $LSOUTPUT; do
  echo $f

  _sedout=`echo $f|sed 's/.*....-..-.. ..:\(..\).*/\1/'`

  if [ "$_sedout" -gt 30 ]; then
    echo "Passed!"
  fi

  echo
done

您必须改变 sed 正则表达式才能获取正确的位置,但只要您有 sed,这应该就可以工作。如果 ls 没有提供足够的详细信息,我相信您可以使用一个名为 istat 的命令。

如果您的 shell 是 ksh,那么语法应该与 bash 非常相似。我只是使用了那个示例,因为我使用的是 Ubuntu。

答案4

您仍然可以在 findutils 中安装 GNU find -http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html

相关内容