Проверьте, не старше ли файла 30 дней без команды find - PullRequest
3 голосов
/ 11 ноября 2010

Я написал скрипт оболочки bash, и его часть проверяет, существует ли файл старше 30 дней с помощью команды find, к сожалению, когда я загрузил его на свой хост, он не работал, так как команда find заблокирована.

Кто-нибудь знает, как проверить, существует ли файл старше 30 дней, БЕЗ команды find?

Я думаю, мне нужно сделать «ls -a $ filename», а затем проанализироватьстрока даты, преобразовать ее в дату Unix, а затем сравнить с сегодняшней датой, но я очень ржавый в Unix.

Спасибо

Ответы [ 5 ]

7 голосов
/ 11 ноября 2010

stat -c %Z filename дает время последнего изменения в unixtime

stat -c %Y filename, если вы хотите время последнего изменения.

3 голосов
/ 11 ноября 2010

Вы можете использовать if [ $file -ot $timestamp_file ] (-ot означает «старше, чем»).Вам нужно будет создать соответствующий файл, например, с touch (который принимает опции метки времени).Если это периодическая задача, вы также можете создавать файл метки времени при каждом запуске для использования в следующий раз.

0 голосов
/ 10 ноября 2013

Это не работает в Linux: без опции -v в дате

t=`date +%Y%m%d%H%M`
let u=$t-1000000
touch -t "$u" $DATEFILE
if [ $SERVERFILE -ot $DATEFILE ]; then
  rm $SERVERFILE
fi
0 голосов
/ 12 ноября 2010

ОК, вот как я это сделал в конце ...

  1. Я коснулся файла с сегодняшней датой - 1 месяц.

touch -t "$(date -v -1m +%Y%m%d%H%M)" ${DATEFILE}

  1. Был ли тест старше 2-х файлов.

if [ ${SERVERFILE} -ot ${DATEFILE} ]

Спасибо всем.

0 голосов
/ 11 ноября 2010

Пусть ls выведет метку времени Unix, например:

ls -l --time-style='+%s'

Затем получите метку времени из выходных данных и просто рассчитайте, есть ли между текущим временем 30 × 24 × 60 × 60 секунди отметка времени от ls.

Вы можете получить текущую отметку времени, используя

date '+%s';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...