基于文件时长与目录TXT列表的媒体服务器清理脚本开发
针对你的媒体服务器剧集清理需求,我整理了一套实用的解决方案,包含配置文件、自动清理脚本和定时任务设置,完全满足你随时增删清理目标、90天自动过期删除的需求:
解决方案:媒体服务器指定剧集90天自动清理
1. 创建清理目标列表文件
首先创建一个纯文本文件,用来存放需要定期清理的剧集路径——你可以随时编辑这个文件增删目标,非常灵活。
文件格式说明
- 每行填写一个剧集文件夹的绝对路径
- 支持用
#开头添加注释行(脚本会自动跳过) - 空行也会被脚本忽略
示例cleanup_list.txt内容:
# 以下是需要90天后清理的剧集路径 /mnt/media/剧集/XX第一季 /mnt/media/剧集/YY特别篇 /mnt/media/剧集/Z临时限定剧
2. 编写自动清理脚本
用Bash脚本实现核心清理逻辑,脚本会读取列表文件,遍历每个目标路径,删除创建时间超过90天的媒体文件,同时记录操作日志方便排查。
脚本代码
#!/bin/bash # -------------------------- 配置区 -------------------------- LIST_FILE="/mnt/media/cleanup_list.txt" # 替换成你的列表文件路径 LOG_FILE="/var/log/media_cleanup.log" # 日志文件路径,可自定义 RETENTION_DAYS=90 # 保留天数,默认90天 # ----------------------------------------------------------- # 检查列表文件是否存在 if [ ! -f "$LIST_FILE" ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') - 错误:清理列表文件 $LIST_FILE 不存在" >> "$LOG_FILE" exit 1 fi # 遍历列表中的每个路径 while IFS= read -r DIR_PATH; do # 跳过空行和注释行 [[ -z "$DIR_PATH" || "$DIR_PATH" =~ ^# ]] && continue # 检查目标路径是否存在 if [ ! -d "$DIR_PATH" ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') - 警告:路径 $DIR_PATH 不存在,跳过" >> "$LOG_FILE" continue fi # 清理指定后缀的媒体文件(可根据你的文件类型调整) echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始清理路径:$DIR_PATH" >> "$LOG_FILE" find "$DIR_PATH" -type f \( -name "*.mp4" -o -name "*.mkv" -o -name "*.avi" -o -name "*.mov" \) \ -ctime +$RETENTION_DAYS -delete -print >> "$LOG_FILE" done < "$LIST_FILE" echo "$(date '+%Y-%m-%d %H:%M:%S') - 本次清理任务完成" >> "$LOG_FILE"
脚本设置步骤
- 将脚本保存为
media_cleanup.sh - 给脚本添加执行权限:
chmod +x /path/to/media_cleanup.sh - 手动运行测试(确保无报错):
/path/to/media_cleanup.sh
3. 设置每日定时任务(Cron)
通过系统Cron实现脚本每日自动运行,推荐在凌晨服务器负载低的时段执行。
配置步骤
- 打开Cron编辑界面:
crontab -e - 添加定时任务(示例为每天凌晨2点执行,可自定义时间):
时间格式说明:0 2 * * * /path/to/media_cleanup.sh分钟 小时 日 月 周,0 2 * * *代表每天凌晨2点整执行。 - 保存退出后,Cron会自动生效。
4. 使用说明
- 增删清理目标:直接编辑
cleanup_list.txt,添加/删除路径即可,无需修改脚本或定时任务 - 查看清理日志:通过
tail -f $LOG_FILE实时查看清理过程,或直接打开日志文件排查问题 - 调整保留天数:修改脚本配置区的
RETENTION_DAYS参数即可
内容的提问来源于stack exchange,提问作者DGC
相关产品推荐
相关产品推荐

