我有一个文件夹,每 10 分钟就有一个日志文件:
alfred_140810-190001.json
alfred_140810-191001.json
alfred_140810-192002.json
alfred_140810-193001.json
alfred_140810-194001.json
alfred_140810-195001.json
alfred_140810-200002.json
alfred_140810-201119.json
alfred_140810-202002.json
...
Run Code Online (Sandbox Code Playgroud)
我如何实现这一目标?
所以我想要过去四个星期的一个文件(4 个文件)每月一个文件(12 个文件)和每年一个(相同的系统就像rsnapshot对他的备份进行排序一样)。
您需要 logrotate http://linuxcommand.org/man_pages/logrotate8.html。
它可能已经在您的系统上。您只需要配置它。然而它的主要目的是清除旧的日志文件,我不知道你是否可以将其配置为保留一个文件。
你可以做什么
创建几个目录log, log.weekly, log.monthly, 和log.yearly
log所有日志文件所在的位置。创造
log到log.weekly,log到log.monthly,以及log到log.yearly。然后为不同的目录适当配置 logrotate。
    #!/bin/bash
    NOW=$(date +%
    ls -rt1 ${LOG} | while read FILE
    do
        TVAL=$(stat --printf %W ${LOG}/${FILE})
        if [ $(ls -1 ${LOG.WEEKLY} | wc -l) ] -eq 0 ]
        then
             cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
        else
             LAST_WEEKLY=$(ls -t1 ${LOG.WEEKLY} | head -n 1 | stat --printf %W)
             if [ $((${TVAL}-${LAST_WEEKLY})) -gt $((60*60*24*7)) ]
             then
                 cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
             fi
        fi
   # repeat the above logic for month and year
   rm ${LOG}/${FILE} 
   done
Run Code Online (Sandbox Code Playgroud)