【问题标题】:shell script to generate new log with date stamp用于生成带有日期戳的新日志的 shell 脚本
【发布时间】:2013-03-25 01:49:07
【问题描述】:

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

我有一个每次运行时都会生成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

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

【问题讨论】:

标签: linux shell unix logging


【解决方案1】:
mv applist.log applist_`date -r applist.log +%Y%m%d%H%M%S`.log

这会将文件移动到名称中带有日期的新文件中。 date 命令允许您以任何格式显示。有关这些字符序列的完整描述,请参阅 man date。使用反引号将首先运行里面的命令。 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 并且每秒运行不会超过一次。

【讨论】:

  • @JumpOffBox,我希望这会有所帮助。
【解决方案2】:

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

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"  

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多