Маніпулювання рядком datestamp послідовно з форматом дати% Y% m% d


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"? Також перевірте yr відповідь з 19820103 ...

- Я подивився man date.

- apropos date викидає 161 хіт, який я також розглянув.

Чи може хтось допомогти з цим лайнером?


GNU date, що представляє інтерес?
bertieb

@bertieb: Так, GNU дата. Мій перший приклад - це високосний рік!
Cbhihe

Welp, GNU date на допомогу потім :)
bertieb

Відповіді:


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 буде обробляти його.


1
Праворуч. Це точно що я мав на увазі, і я бачив, що варіант на сторінці людини, але не зрозумів його використання. Спасибі - PS: До речі "земля дощу і пиття" могла б бути багато місць ... будь-яке місце на північ від мене, насправді. :))
Cbhihe

@Cbhihe Glad це працювало для вас - це неймовірно корисна річ, щоб знати про (і особливість, яку я пропускаю, коли не доступна на інших мовах):) воля;)
bertieb

6

Щоб відобразити відформатовану дату для x-днів з сьогоднішнього дня:

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

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

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

2
Мені сподобалася збіжність вашої відповіді, і відповідь не відповідає дійсності. Але це просто прийшло після власного @bertieb, що так само правильно. Так що я можу тільки вас проголосувати. Тх Стівен і вибачте за це.
Cbhihe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.