Cesar
Cesar

Reputation: 1610

How can I get and format yesterday's date on the command line?

I have a Perl script which will run in a cron job on linux suse. It will take as input a log file that was generated yesterday. The filename of the log contains the date (i.e. log.20100209)

Can I send yesterday's date with the format in the prompt? Should I create an additional script to get the date and execute? If so, how can I do that?

Thanks

perl myscript.pl -f log.20100209

Edit

Thanks for your help

It worked with:

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

Upvotes: 8

Views: 13950

Answers (3)

Vanessa MacDougal
Vanessa MacDougal

Reputation: 992

You shouldn't need to send yesterday's date as an additional parameter. You can already get it using two other methods:

  1. Perl's built-in time(), localtime(), or gmtime() functions will give you the current date and time, and you can work with that to determine yesterday's date.
  2. It is already included in the name of your log file, so you can parse the file name to get the date into the format you need.

Perl has a lot of modules to work with dates and times, depending exactly what you need to do.

Upvotes: 0

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798606

GNU date:

date --date='yesterday' '+%Y%m%d'

Upvotes: 29

Hans W
Hans W

Reputation: 3891

You can get yesterday's date like this:

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

You can use this when calling your script at the prompt:

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

But this is unreadable, and I suggest you write a proper script that calculates yesterday's date, and then calls myscript.pl.

Upvotes: 1

Related Questions