Bash скрипт должен конвертировать строку в дату

459
stefzeer

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

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

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

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

29 октября 2018 г.

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

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

Спасибо.

0

1 ответ на вопрос

2
fra-san

Команда 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не может понимать иностранные языки .

Похожие вопросы