如何修改Bash备份删除函数,仅保留最新5个备份文件?
修改Bash函数保留最新5个备份文件
下面是修改后的delete_old_backup_files函数,实现删除匹配类型的备份文件但保留最新创建的5个:
delete_old_backup_files() { local fpath="$1" local fexpr="$2" local keep_count=5 # 查找匹配文件,按修改时间逆序排序,跳过前5个后删除剩余文件 find "$fpath" -name "${fexpr##*/}" -type f -printf '%T@ %p\n' | sort -nr | awk -v keep="$keep_count" 'NR > keep {print $2}' | xargs -r rm -f }
关键步骤说明:
find命令格式化输出:用-printf '%T@ %p\n'输出每个文件的**修改时间戳(秒级)**和完整路径,为后续排序提供可靠依据。- 逆序排序:
sort -nr按时间戳数值从大到小排序,确保最新的文件排在最前面。 - 筛选待删文件:
awk跳过前keep_count行(即最新的5个文件),只输出需要删除的文件路径。 - 安全删除:
xargs -r的-r参数避免在没有待删文件时执行rm,防止出现"rm: missing operand"的错误。
兼容与调整说明:
- 所有变量都加了双引号,避免文件名包含空格、特殊字符时出现异常。
- 若你的系统
find不支持%T@(部分老版本系统),可以替换为stat命令(Linux环境):find "$fpath" -name "${fexpr##*/}" -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk -v keep="$keep_count" 'NR > keep {print $2}' | xargs -r rm -f - 要调整保留的文件数量,直接修改
keep_count变量的值即可。
内容的提问来源于stack exchange,提问作者bsa
相关产品推荐
相关产品推荐

