用于生成带有日期戳的新日志的shell脚本

时间:2013-03-25 01:49:08

标签: linux shell unix logging

有没有办法从日志文件中提取最后修改的日期和时间,并将该日期和时间附加到文件中?

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

像:

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

就像让我说我第一次运行该工具并生成applist.log:

applist.log     Mon 03-29-2013

下次我在03-30-2013运行该工具时,我想移动现有的applist.log文件,其中包含一个新名称,其中包含创建它的日期和时间:

like applist_03-29-2013.log

因为该工具将在03-30-2013再次生成applist.log。

2 个答案:

答案 0 :(得分:1)

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

这会将文件移动到名称中包含日期的新文件。 date命令允许您以任何格式显示。有关这些字符序列的完整说明,请参阅man date。使用后退滴答将首先在内部运行命令。日期-r选项将获取相关文件的日期。

示例:

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

我认为你的程序是一个cron,每秒运行的次数不会超过一次。

答案 1 :(得分: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"