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

Linux 用于生成带有日期戳的新日志的shell脚本,linux,shell,unix,logging,Linux,Shell,Unix,Logging,是否有方法从日志文件中提取上次修改的日期和时间,并将该日期和时间附加到该文件 我有一个工具,每次运行时都会生成appslist.log文件。 当我运行工具时,通过我的脚本,applist.log文件已经存在,然后我可能需要将它与创建它的时间和日期关联 比如: 比如说,我第一次运行该工具时,它生成了applist.log: applist.log Mon 03-29-2013 下次在2013年3月30日运行该工具时,我希望使用包含创建日期和时间的新名称移动现有的applist.log文件

是否有方法从日志文件中提取上次修改的日期和时间,并将该日期和时间附加到该文件

我有一个工具,每次运行时都会生成appslist.log文件。 当我运行工具时,通过我的脚本,applist.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

mv applist.log applist_`date -r applist.log +%Y%m%d%H%M%S`.log
这会将文件移动到名称中带有日期的新文件中。“日期”命令允许您以任何格式显示。有关这些字符序列的完整说明,请参见
人工日期
。使用反勾号将首先在内部运行命令。日期上的
-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,每秒运行的次数不会超过一次。

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

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"  

你看过logrotate吗@JumpOffBox,我希望这有帮助。
fileName="applist.log"  
modificationTime="$(date +%Y%m%d_%H%M%S --reference="${fileName}")"  
mv -i "${fileName}" "${fileName%.log}_${modificationTime}.log"