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

我想用ksh或bash编写一个shell脚本,如果特定文件大于30分钟,则以1退出。 (最后修改时间早于半小时)。 在Linux或者现代的unix上很容易,但是我必须在AIX 5.2版本上完成。

所以约束:

  • 在'find'中没有-mmin -mmax选项
  • 触摸时没有-d选项( touch -d '30分钟前'temp然后find!-newer temp不起作用)
  • 没有“统计”命令
  • date”命令中没有%s参数( date+%s不起作用)
  • 我不允许安装任何软件

你能帮我解决这个问题吗?

    我可以使用touchtestdate 。 (在AIX 5.3.0.0上testing)

    首先,您需要在过去30分钟内创build一个文件(不幸的是,这需要事先知道机器上当前的时区,但是如果需要的话,您也许可以将其应用到事情中)。

    在这个例子中,当前时区是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 

    现在使用testing来比较date:

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

    使用ls

    ls -l列出文件的最后修改时间。
    你可以用awk或者cut来剖析输出,然后parsingdate。

    请注意,在AIX上(与大多数* nix系统一样), ls提供的date格式取决于上次修改文件的时间。 有关详细信息 ,请参阅文档 。

    如果你有基本的,bash / tsh和sed。 您可以编写一个简单的脚本来testing与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正则expression式来拉正确的位置,但这应该工作,只要你有sed。 如果ls没有提供足够的细节,我相信有一个叫istat的命令可以使用。

    如果ksh是你的shell,那么它的语法应该和bash非常相似。 我只是用了这个例子,因为我在Ubuntu上。

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