如何在命令行上获取并格式化昨天的日期?

问题描述:

我有一个Perl脚本,它将在linux suse上的cron作业中运行。它会将昨天生成的日志文件作为输入。日志的文件名包含日期(即log.20100209)如何在命令行上获取并格式化昨天的日期?

我可以使用提示格式发送昨天的日期吗?我应该创建一个额外的脚本来获取日期并执行吗?如果是这样,我该怎么做?

感谢

perl myscript.pl -f log.20100209 

编辑

感谢您的帮助

它的工作有:

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

GNU日期:

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

+1 I宁愿这对我自己的Perl下面:) – 2010-02-10 19:22:59

+0

简单易读,谢谢! – Cesar 2010-02-10 19:43:52

你可以得到昨天的日期是这样的:

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

另请参阅:http://theoryx5.uwinnipeg.ca/CPAN/perl/pod/perlfaq4/How_do_I_find_yesterday's_date.html和http://flux.org.uk/howto/perl/yesterday_date – 2010-02-10 20:35:51

你不应该需要发送昨天的日期作为附加参数。你已经可以开始使用另外两种方法吧:

  1. Perl的内置时间(),本地时间(),或gmtime的()函数会给你当前的日期和时间,你可以与合作,以确定昨天的日期。
  2. 它已包含在日志文件的名称中,因此您可以解析文件名以将日期转换为您需要的格式。

Perl有a lot of modules使用日期和时间,具体取决于您需要做什么。

+0

谢谢,但我想要一些简单的东西,允许独立于日志文件 – Cesar 2010-02-10 19:43:15