关于保留最新文件或清除过期文件的简单总结

  在运维工作中经常遇到要管理备份、日志等与时间戳有关的文件,例如删除超过10天的备份/日志文件,保存最新的10个的备份/日志文件等。

  “删除超过10天的备份/日志文件”是用的比较多的一种,通常用于定时计划任务,每次产生这些文件都是规律的时间点。

  “保存最新的10个备份/日志文件”这种需求通常用在不定时的产生备份(例如每次手动执行一次产生)和日志文件(超过一定的大小则切割)。

  两种不同的需求对应不同的方法去实现,无论使用什么样的方法都要找出所需要操作的文件或者去除不需要的文件。

  Linux Bash Shell代码 “删除超过10天的备份/日志文件” 找出这些超过10天的文件,然后执行删除:

function clean_old_files_older_than_day(){
    save_days=10
    files_ops="/data/docker/logs/myApp/"
    need_clean=$(find ${files_ops} -name "*.log" -mtime +${save_days} -exec ls '{}' \;)
    if [ ! -z ${need_clean} ]; then
        echo "Old logs have been found, clean old logs now. "
        find -L ${files_ops} -maxdepth 1 -name "*.log" -a ! -name "^." -mtime +${save_days} -exec rm -rf '{}' \;
    else
        echo "All logs are not expired, skipping. "
    fi
}

  Linux Bash Shell代码 “保存最新的10个备份/日志文件” 找出这些除了最新的10个文件之外的文件,然后执行删除:

function keep_some_newest_files(){
    num_save=10
    files_ops="/data/backup/db/mysql/"
    num_files=$(find ${files_ops} -type d -printf "%C@ %p\n" | sort -n | wc -l)
    if test ${num_files} -gt ${num_save};then
        echo "total number of files is $num_files."
        num_ops=$(expr ${num_files} - ${num_save})
        echo "$num_ops files are going to be handled."
        list_ops=$(find ${files_ops} -type d -printf "%C@ %p\n" | sort -n | head -n${num_ops} | awk -F '[ ]+' '{print $2}')
        # IFS=' '$'\t'$'\n', If IFS is unset, or its value is exactly <space><tab><newline>
        old_IFS=$IFS
        IFS=" "
        for file_ops in ${list_ops};do
            echo "$file_ops"
            test -d ${file_ops} && rm -rf ${file_ops}
        done
        IFS="$old_IFS"
    else
        echo "total number of files is $num_files."
        echo "0 files are going to be handled, skipping."
    fi

}

tag:日志文件管理,备份文件管理,find删除文件

--end--


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值