linux中保留最新3份文件的shell脚本
常规在使用删除几天前文件的shell脚本时会存在一个问题若是备份服务器停机一段时间则会导致所有文件均被清理掉本篇介绍一下在Linux中如何实现保留最近的3份文件。注改过后的脚本一定先在测试环境测试后再使用。数据无价~1、脚本如下#!/bin/bashset-euopipefail# 开启严格模式增强脚本健壮性ReservedNum3FileDir/home/testFiledate$(date%Y%m%d-%H%M%S)# 检查目录是否存在if[!-d$FileDir];thenecho$date错误目录$FileDir不存在exit1fi# 获取目录下所有普通文件的数量排除目录、链接等FileNum$(find$FileDir-maxdepth1-typef|wc-l)# 当文件数量超过保留数时循环删除最旧的文件while((FileNumReservedNum));do# 安全获取最旧的普通文件处理特殊文件名OldFile$(find$FileDir-maxdepth1-typef-printf%T %p\n|sort-n|head-n1|cut-d -f2-)if[-z$OldFile];thenecho$date警告未找到可删除的文件breakfi# 打印删除日志并执行删除操作echo$date删除文件:$OldFilerm-f$OldFile# 更新文件计数FileNum$((FileNum-1))done2、关键改进点解释严格模式开启set-euopipefail-e命令执行失败时立即退出脚本-u使用未定义变量时立即退出-o pipefail管道中任何命令失败都视为整个管道失败安全的文件数量统计 使用find命令替代ls准确统计普通文件数量FileNum$(find$FileDir-maxdepth1-typef|wc-l)在这里插入代码片安全的旧文件获取 通过文件修改时间排序避免文件名包含特殊字符的问题OldFile$(find$FileDir-maxdepth1-typef-printf%T %p\n|sort-n|head-n1|cut-d -f2-)目录存在性检查 添加目录检查避免脚本在目录不存在时继续执行if[!-d$FileDir];thenecho$date错误目录$FileDir不存在exit1fi三、建议建议先在测试环境中运行脚本并添加-n参数进行语法检查bash-ncleanup_script.sh# 检查脚本语法错误bash-xcleanup_script.sh# 调试模式运行查看每一步执行过程在确认脚本运行正常后再添加到crontab中定期执行。