2013-03-25 142 views
1

有没有办法从日志文件中提取上次修改日期和时间并将该日期和时间附加到文件中?shell脚本生成带日期戳记的新日志

我有一个工具,每次运行时都会生成appslist.log文件。 当我运行该工具时,通过我的脚本,applist.log文件已经存在,然后我可能不得不将它与创建它的时间和日期相关联。

像:

mv applist.log applist_+%Y%m%d_%H%M%S.log 

就像我们说我运行该工具在第一时间和它产生的applist.log:

applist.log  Mon 03-29-2013 

下一次我在2013年3月30日运行该工具,我想用包含创建日期和时间的新名称移动现有的applist.log文件:

like applist_03-29-2013.log 

b因为该工具将在2013年3月30日再次生成applist.log。

+4

有你看着logrotate? http://linux.die.net/man/8/logrotate – patrickmdnet 2013-03-25 02:02:34

回答

1
mv applist.log applist_`date -r applist.log +%Y%m%d%H%M%S`.log 

这会将文件移动到名称中包含日期的新文件。 date命令允许您以任何格式显示。有关这些字符序列的完整描述,请参阅man date。使用back ticks将首先在内部运行命令。日期的-r选项将获得有问题文件的日期。

例子:

[[email protected] temp]$ mv applist.log applist_`date -r applist.log +%Y%m%d%H%M%S`.log 
[[email protected] temp]$ ls -l 
total 196 
-rw-rw-r--. 1 me me  0 Mar 25 20:55 applist_20130325205532.log 

我假设你的程序是cron和将无法运行不止一次第二更。

+0

@JumpOffBox,我希望这可以帮助。 – Jess 2013-03-26 01:12:36

1

获取文件的创建时间取决于您使用的文件系统。
并非所有文件系统都支持检索文件创建时间。尝试:

stat --format=%w applist.log 

如果你得到一个“ - ”,你的文件系统不报告的创建时间。否则,它会打印时间。

如果你创建时间这种方式,您可以使用以下做招:

fileName="applist.log" 
creationTimeEpoch="$(stat --format=%W "${fileName}")" 
creationTime="$(date +%Y%m%d_%H%M%S --date="@${creationTimeEpoch}")" 
mv -i "${fileName}" "${fileName%.log}_${creationTime}.log" 

如果没有,你可以使用文件的修改时间:

fileName="applist.log" 
modificationTime="$(date +%Y%m%d_%H%M%S --reference="${fileName}")" 
mv -i "${fileName}" "${fileName%.log}_${modificationTime}.log"