因为装的是大姐姐,所以效果不便展示过多。简单说下原理:
# 原本的媒体库结构 ,媒体库文件以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"
fi
done
log "操作完成!"
2. 赋予权限,测试运行:
chmod +x media_sync.sh
./media_sync.sh
# 如果运行报错,需要检查是否是字符集问题,
3. 为媒体库添加latest和achive目录
4. 配置定时任务
# 编辑当前用户的crontab
crontab -e
# 添加以下行(路径替换为实际脚本位置)
0 */12 * * * /<脚本目录>/media_sync.sh >/dev/null 2>&1