You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改BASH中的find命令实现保留最新5个备份文件

解决备份目录文件数≥5时自动删除旧文件的问题

我明白你想替换原有的按时间删除文件的逻辑,改成当备份目录里的文件数量达到或超过5个时,自动清理最旧的文件来维持数量上限。下面是可以直接集成到你现有脚本里的解决方案:

核心思路

先统计备份目录中的文件总数,当数量≥5时,按修改时间排序找出最旧的一批文件,删除超出的部分(只保留最新的5个)。

修改后的完整脚本

#!/bin/bash
DIR="/home/teste/folha1/it/backups"
if [ -d "$DIR" ]; then
    echo "Directory Exist"
else
    mkdir -p "$DIR"
    echo "Created Directory"
    exit 1
fi

# 执行压缩备份操作
zip -rv "$DIR/scripts$(date +%Y-%m-%d_%H:%M:%S_%N).bck.zip" "$HOME/folha1/it/scripts"

# 新增:维护备份文件数量上限,最多保留5个最新备份
FILE_COUNT=$(ls -1q "$DIR" | wc -l)
if [ "$FILE_COUNT" -ge 5 ]; then
    # 按修改时间降序排列(最新在前),取第6个及以后的旧文件并删除
    ls -1t "$DIR" | tail -n +6 | xargs -I {} rm -f "$DIR/{}"
    echo "Cleaned up old backups: kept latest 5 files"
fi

关键命令解释

  • ls -1q "$DIR" | wc -l:统计目录下的文件总数,-1q确保每个文件占一行,同时能安全处理带空格、特殊字符的文件名。
  • ls -1t "$DIR":按文件修改时间降序排列,最新的文件会排在最前面。
  • tail -n +6:从第6个文件开始截取(也就是跳过前5个最新的文件,剩下的都是需要删除的旧文件)。
  • xargs -I {} rm -f "$DIR/{}":把截取到的旧文件路径传递给rm命令删除,-f参数避免删除时弹出交互确认提示。

灵活调整

如果你之后想修改保留的备份数量,只需要把tail -n +6中的6改成「保留数量+1」即可。比如想保留10个备份,就改成tail -n +11。

内容的提问来源于stack exchange,提问作者José Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:47:48