2013-03-25 72 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"