我想用ksh或bash编写一个shell脚本,如果特定文件大于30分钟,则以1退出。 (最后修改时间早于半小时)。 在Linux或者现代的unix上很容易,但是我必须在AIX 5.2版本上完成。
所以约束:
你能帮我解决这个问题吗?
我可以使用touch , test和date 。 (在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