Shell: генерируем последовательность дат

Простой случай когда надо сгенерировать последовательность дат. Например для генерации шаблона партиций в бд.

$ seq \
  `date -d "2021-02-01 00:00:00" "+%s"` \
  86400 \
  `date -d "2021-09-01 00:00:00" "+%s"` \
  | xargs -I{} date -d @{} +%Y-%m-%d
  • date -d "<date>" "+%s" - преобразовать дату в секунды;
  • seq <seconds from> 86400 <seconds to> - добавляем к стартовой дате по 1 дню в секундах;
  • | - отправляем все на вход другой команде (в данном случае xargs);
  • xargs -I{} <command> - подставляем каждую строку из входа на место {} в описании команды;
  • date -d @{} +%Y-%m-%d - преобразуем секунды, которые были подставлены предыдущей командой в дату нужного формата.
$ seq \
 `date -d "2021-02-01 00:00:00" "+%s"` \
 86400 \
 `date -d "2021-02-12 00:00:00" "+%s"` \
 | xargs -I{} date -d @{} +%Y-%m-%d
2021-02-01
2021-02-02
2021-02-03
2021-02-04
2021-02-05
2021-02-06
2021-02-07
2021-02-08
2021-02-09
2021-02-10
2021-02-11
2021-02-12

Категории: HowTo