Назад | Перейти на главную страницу

Как определить, что файл старше 30 минут в AIX?

Я хотел бы написать сценарий оболочки в 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