Я хотел бы написать сценарий оболочки в ksh или bash, который завершается с 1, если конкретный файл старше 30 минут. (Время последней модификации старше получаса). Это было бы легко в Linux или современном unix, но я должен сделать это в версии AIX 5.2.
Итак, ограничения:
Не могли бы вы помочь, как я могу это сделать с этими ограничениями?
Я могу сделать это, просто используя touch
, test
, и date
. (проверено на 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
Использовать ls
.
ls -l
перечисляет время последней модификации файла.
Вы можете проанализировать вывод с помощью awk
или cut
а затем проанализируйте дату.
Обратите внимание, что в AIX (как и в большинстве систем * nix) формат даты, предоставляемый ls
зависит от того, как давно файл был изменен в последний раз. Видеть документация для уточнения.
Если у вас есть основы, используйте 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.
Если ваша оболочка ksh, синтаксис должен быть очень похож на синтаксис bash. Я использовал этот пример, потому что я использую Ubuntu.
Вы все еще можете установить GNU find в findutils - http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html