как увеличить дату в оболочке linux, когда дата является переменной - PullRequest
1 голос
/ 25 января 2020

Мне нужно увеличивать переменную даты на 15 минут. Этот сценарий увеличивает текущую дату

#!/bin/bash
for i in {0,15,30,45}
do
  date --date='+'$i' minutes' +"%Y%m%d%H%M%S"
  echo "$date"
done

Но мне нужно установить начальную дату для года go и продолжать увеличивать ее на протяжении года. Можно ли создать переменную datetime и продолжать добавлять к ней минуты в al oop?

Мне это нужно для загрузки файлов с именами, например 20190101231500.csv, и каждое следующее имя файла имеет временную метку 15 минут спустя.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 января 2020

Использование date --date для вычисления большого числа дат станет очень медленным.

# With date calculations (too) slow, only done for 10 days
d="2015-01-01"
((maxminutes=24*60))
while [ "$d" != "2015-01-10" ]; do
  d=$(date -I -d "$d + 1 day")
  for ((m=0; m<${maxminutes};m+=15)); do
     date -d "${d} + ${m} minutes" +"%Y%m%d%H%M"
  done
done 

Альтернативой является использование awk, предотвращающее частый вызов другой программы

awk -v startdate="2015-01-01" -v enddate="2015-01-10" 'BEGIN {
         printf("%s %s\n", startdate, enddate);
      split(startdate,A,"[-]");
      T1=mktime(A[1] " " A[2] " " A[3] " 0 0 0");
      split(enddate,B,"[-]");
      T2=mktime(B[1] " " B[2] " " B[3] " 23 59 59");
      while (T1 < T2) {
         printf("%s\n", strftime("%Y-%m-%d %H:%M",T1));
         T1+=60*15;
      }
   }'
0 голосов
/ 25 января 2020

С минимальным изменением вашего кода:

#!/bin/sh
for i in {0,15,30,45}
do
  date --date="-$i minutes ago" +"%Y%m%d%H%M%S"
  echo "$date"
done`

вы можете использовать опцию X months/days/years/minutes ago с --date, чтобы вычесть текущую дату. Используйте отрицательные числа, чтобы двигаться вперед.

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