因为装的是大姐姐,所以效果不便展示过多。简单说下原理:
# 原本的媒体库结构 ,媒体库文件以media为例media/**── movies/** **── 2023/** ** **── MovieA.mp4** **── MovieA.mp4**── tv_shows/ **── MovieA.mp4# 脚本会在media平级生成一个latest文件夹,将media中最近7天修改的文件生成软链接放在latest中latest/**── movies#2023#MovieA.mp4 → ../../movies/2023/MovieA.mp4**── movies#MovieA.mp4 → ../../movies/MovieA.mp4**── tv_shows#MovieA.mp4 → ../../tv_shows/MovieA.mp4# 脚本会在media平级生成一个archive文件夹,将latest中超过7天修改的软链接放在`archive/年-月`中archive/**── 2023-10/ **── movies#2023#MovieA.mp4 **── movies#MovieA.mp4
安装教程:
1.脚本:media_sync.sh
#!/bin/bash# 配置区 ==============================================MEDIA_PARENT="/vol1/1000/影视1"MEDIA_LIBRARY="$MEDIA_PARENT/media" # 影音库根目录(确保无末尾斜杠)LATEST_DIR="$MEDIA_PARENT/latest" # 最新文件链接目录(确保无末尾斜杠)ARCHIVE_LIBRARY="$MEDIA_PARENT/archive"LOG_DIR="$MEDIA_PARENT/.log"LOG_FILE="$LOG_DIR/media_library.log" # 日志文件路径DAYS=7 # 追踪最近几天文件# =====================================================# 创建必要目录mkdir -p "$LATEST_DIR"mkdir -p "$LOG_DIR"mkdir -p "$ARCHIVE_LIBRARY"# 函数:记录日志log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"}# 步骤1:清理旧的latest链接log "开始清理旧链接..."find "$LATEST_DIR" -type l -delete 2>/dev/null# 步骤2:生成最新链接(处理重名)log "正在生成最新链接(防重名处理)..."find "$MEDIA_LIBRARY" \ -type f \ -mtime -$DAYS \ -not -path "$LATEST_DIR/*" \ -print0 | while IFS= read -r -d '' file; do # 计算相对路径(相对于媒体库根目录) relative_path="${file#$MEDIA_LIBRARY/}" # 替换路径中的"/"为"#",避免重名冲突 link_name="${relative_path//\//#}" # 创建软链接(强制覆盖已有链接) ln -sf "$file" "$LATEST_DIR/$link_name" log "创建链接: $link_name → $file"done# 步骤3:归档过期文件(按年月分类)log "正在归档旧文件..."find "$LATEST_DIR" -type l -print0 | while IFS= read -r -d '' link; do target=$(readlink -f "$link") # 检查目标文件是否已过期 if [ $(date -d "now - $DAYS days" +%s) -ge $(stat -c %Y "$target") ]; then # 获取目标文件的修改时间年月 year_month=$(date -d "@$(stat -c %Y "$target")" "+%Y-%m") archive_dir="$ARCHIVE_LIBRARY/$year_month" # 创建归档目录并移动链接(保留原名) mkdir -p "$archive_dir" mv "$link" "$archive_dir/" log "已归档: $link → $archive_dir" fidonelog "操作完成!"
2. 赋予权限,测试运行:
chmod +x media_sync.sh./media_sync.sh# 如果运行报错,需要检查是否是字符集问题,
3. 为媒体库添加latest和achive目录
4. 配置定时任务
# 编辑当前用户的crontabcrontab -e# 添加以下行(路径替换为实际脚本位置)0 */12 * * * /<脚本目录>/media_sync.sh >/dev/null 2>&1