Как я могу получить и отформатировать вчерашнюю дату в командной строке? - PullRequest
8 голосов
/ 10 февраля 2010

У меня есть Perl-скрипт, который будет запускаться в задании cron на linux suse. В качестве входных данных будет использован файл журнала, созданный вчера. Имя файла журнала содержит дату (т.е. log.20100209)

Можно ли отправить вчерашнюю дату в формате, указанном в приглашении? Должен ли я создать дополнительный скрипт, чтобы получить дату и выполнить? Если так, как я могу это сделать?

Спасибо

perl myscript.pl -f log.20100209

Редактировать

Спасибо за вашу помощь

Работает с:

perl myscript.pl -f log.`date --date='yesterday' '+%Y%m%d'`

Ответы [ 3 ]

28 голосов
/ 10 февраля 2010

Дата GNU:

date --date='yesterday' '+%Y%m%d'
1 голос
/ 10 февраля 2010

Вы можете получить вчерашнюю дату следующим образом:

perl -we'@a=localtime(time-24*3600);printf "%04d%02d%02d", $a[5]+1900, $a[4]+1, $a[3]'

Вы можете использовать это при вызове вашего скрипта в командной строке:

perl myscript.pl -f log.`perl -we'@a=localtime(time-24*3600);printf "%04d%02d%02d", $a[5]+1900, $a[4]+1, $a[3]'`

Но это нечитаемо, и я предлагаю вам написать правильный скрипт, который вычисляет вчерашнюю дату, а затем вызывает myscript.pl.

0 голосов
/ 10 февраля 2010

Вам не нужно отправлять вчерашнюю дату в качестве дополнительного параметра. Вы уже можете получить его, используя два других метода:

  1. Встроенные в Perl функции time (), localtime () или gmtime () сообщат вам текущую дату и время, и вы можете работать с ними, чтобы определить вчерашнюю дату.
  2. Он уже включен в имя вашего файла журнала, поэтому вы можете проанализировать имя файла, чтобы получить дату в нужном формате.

Perl имеет множество модулей для работы с датами и временем, в зависимости от того, что именно вам нужно сделать.

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