Здравствуйте, у меня есть скрипт bash для проверки целостности резервных копий. Мне нужно отредактировать его, так как я должен предупредить меня, когда самая старая резервная копия более 60 дней (когда мы ее удаляем).

Теперь дата извлекается из другого файла

OLDEST_DATE=`cat /tmp/B_BACKUP_TMP.out | head -1  | cut -f5,6,8 -d" "`

в следующем формате:

29 октября 2018 г.

Тем не менее, этот формат не может быть выбран, когда я пытаюсь использовать его с -mtime +60

Любые идеи, как я могу преобразовать это?

Спасибо.

1 ответ1

2

Команда date довольно гибка в распознавании строк, представляющих даты. Так, например:

$ date -d 'Oct 29 2018'
Mon Oct 29 00:00:00 CET 2018

Флаг -d указывает date отображать дату, данную ему в виде строки.
Вы можете добавить параметр +FORMAT чтобы преобразовать дату, как вам нравится. Например:

$ date -d 'Oct 29 2018' '+%Y-%m-%d'
2018-10-29

Обратитесь к man date для опции, которую вы должны установить формат вывода.

РЕДАКТИРОВАТЬ:

Извините, я не получил вашу ссылку на -mtime . Вы говорите о фильтре find ? Если это так, я думаю, вам нужна разница между сегодняшним днем и вашим OLDEST_DATE в днях.

Вы можете получить его, конвертировав даты в формат Epoch (секунды с 1970-01-01 00:00:00 UTC). Например:

$ current="$(date '+%s')"
$ oldest_date_epoch="$(date -d "$OLDEST_DATE" '+%s')"
$ diff_days=$(( ("$current" - "$oldest_date_epoch") / (3600 * 24) ))

Обратите внимание, что это не общее решение, так как date не может понимать иностранные языки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .