在群晖(Synology NAS)上,可以通过系统自带的**“任务计划” (Task Scheduler)** 配合一段简单的 Shell 脚本来实现定时清理文件夹,仅保留最新备份的2 个文件。这个场景非常适合用于自动清理旧的备份文件或录像。
第一步:准备清理脚本
这段脚本的逻辑是:进入指定文件夹,按时间顺序排列所有文件(最新的在最前),跳过前 2 个文件,然后删除剩下的所有文件。
#!/bin/bash
# 1. 设定你要清理的目标文件夹路径(请务必修改为你的实际路径!)
TARGET_DIR="/volume1/your_share_folder/backup"
# 2. 进入该目录,如果目录不存在则直接退出,防止误删其他地方的文件
cd "$TARGET_DIR" || exit
# 3. 找出除最新2个文件外的其他文件并删除
# ls -tp: 按修改时间降序排列,并在文件夹后加上 '/'
# grep -v '/$': 过滤掉文件夹,只处理纯文件
# tail -n +3: 从第 3 行开始输出(也就是跳过前 2 个最新的文件)
# while read... : 逐行读取文件名并强制删除
ls -tp | grep -v '/$' | tail -n +3 | while read -r file; do
rm -f "$file"
done💡 提示:如何获取真实的文件路径?
打开群晖的 File Station,找到你要清理的文件夹,右键点击选择 属性,在“位置”一栏中看到的路径(例如 /volume1/docker/backups)就是你需要填入脚本中的 TARGET_DIR。
第二步:在群晖中设置定时任务
登录群晖 DSM 后台。
打开 控制面板 (Control Panel) -> 任务计划 (Task Scheduler)。
点击左上角的 新增 (Create) -> 计划的任务 (Scheduled Task) -> 用户定义的脚本 (User-defined script)。
1. 常规 (General) 选项卡
任务名称: 随便填,例如
清理旧备份。用户账号: 建议选择
root(确保有足够的权限删除文件)。如果你非常确定某个普通用户有完全的读写删除权限,也可以选那个用户。已启用: 保持勾选。
2. 计划 (Schedule) 选项卡
根据你的需求设置运行频率。例如:选择 每天 (Daily),时间设置为凌晨
02:00。
3. 任务设置 (Task Settings) 选项卡
(可选)在“通过电子邮件发送运行详情”中填入你的邮箱,以便脚本执行失败时通知你。
在底部的 用户定义的脚本 (Run command) 文本框中,粘贴你修改好路径的上述脚本。
点击 确定 (OK) 保存任务。系统可能会弹出一个警告,提示运行 root 脚本的风险,确认即可。
第三步:测试脚本(非常重要!)
在让它自动运行之前,强烈建议先手动测试一次,防止路径填错导致误删重要文件。
在“任务计划”列表中找到你刚创建的任务。
选中它,点击上方的 运行 (Run)。
检查目标文件夹,看看是否只剩下了最新的 2 个文件。
安全建议: 在初次测试时,你可以先将脚本中的 rm -f "$file" 替换为 echo "准备删除: $file"。运行后,在任务计划的“设置 -> 查看结果”中检查输出日志,确认它要删除的文件名是否正确。确认无误后,再改回 rm -f 命令。