1

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

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

4

2 回答 2

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 并且每秒不会运行超过一次。

于 2013-03-26T00:55:08.947 回答
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"  
于 2013-03-26T01:10:14.297 回答