5

Мне нужно создать файлы журналов, которые по сути представляют собой метки даты с префиксом yp_ и суффиксом .log , а также с манипулируемым номером дня:

$ touch yp_$(echo "$(date +%Y%m%d)-10" | /usr/bin/bc -l).log
$ ls
yp_20150912.log   # ... ok for today's date.

На сегодня все в порядке, но все черты выходят из строя, когда число дня составляет от 01 до 10 включительно. Результат больше нельзя интерпретировать как отметку даты.

Например, просто представьте, что это день 8 марта 2016 года, то есть «20160308». Как мне кодировать вышеупомянутое, чтобы убедиться, что вычитание 10 дней даст не «20150298», а «20150227»? Также проверьте ваш ответ с 19820103 ...

- Я посмотрел на man date .

- По apropos date извергает 161 хитов, которые я также рассмотрел.

Может ли кто-нибудь помочь с этим одним вкладышем?

2 ответа2

6

Чтобы отобразить форматированную дату для x-дней с сегодняшнего дня:

$ echo $(date +%Y%m%d)
20150922

$ echo $(date -d -10days +%Y%m%d)
20150912

$ echo $(date -d +10days +%Y%m%d)
20151002
6

Мне нужно манипулировать датами (обращая внимание на високосные годы)

К счастью, у GNU date есть очень удобная опция -d :

-d, --date=STRING
          display time described by STRING, not 'now'

man date)

Это принимает произвольные описания дат, такие как «сейчас + 1 год», «28 января + 3 недели»; или в вашем случае: «сейчас - 10 дней»:

touch yp_$(date -d 'now - 10 days' +%Y%m%d).log

Нет необходимости в грязных вызовах bc , не нужно беспокоиться о високосных годах - GNU date справится с этим.

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