首页 > 解决方案 > 用于扫描重复剧集编号的 bash 脚本,附加剧集修饰符

问题描述

我使用 youtube-dl 来归档特定的博客。我使用自定义 bash 脚本(称为 tvify)来帮助我将我的内容组织成 Plex 就绪的文件名,以便以后通过我的家庭 Plex 服务器重播。

存档内容工作正常,除非博主在同一日期发布多个视频 - 如果发生这种情况,我的脚本会为给定的月份/日期创建多个文件,并且 plex 会看到重复的剧集。在 plex 应用程序中,它将它们作为同一集的不同“版本”填充在一起。结果是视频的描述不再与其内容匹配,除非我访问额外的子菜单,否则只会出现一个“版本”。

视频由你从 cron-job 开始的 tube-dl 下载,下载器脚本运行以下命令来帮助格式化它们的文件名并将它们填充到“季节”的适当文件夹中。

季节是视频发布的年份,剧集是 MMDD 格式的月份和日期的组合。

下面是我的 'tvify' 脚本,它有助于执行文件名操作并将文件塞入适合季节的文件夹中。

#!/bin/bash
mySuff="$1"
echo mySuff="$mySuff"

if [ -z "$1" ]; then
        mySuff="*.mp4"
fi

for i in $mySuff
do
        prb=`ffprobe -- "$i" 2>&1`
        myDate=`echo "$prb" | grep -E 'date\s+:' | cut -d ':' -f 2`
        myartist=`echo "$prb" | grep -E 'artist\s+:' | cut -d ':' -f 2`
        myTitle=`echo "$prb" | grep -E 'title\s+:' | cut -d ':' -f 2 | sed 's/\//_/g'`
        cwd_stub=`pwd | awk -F'/' '{print $NF}'`
        if [ -d "s${myDate:1:4}" ]; then echo "Directory found" > /dev/null; else mkdir "s${myDate:1:4}"; fi
        [ -d "s${myDate:1:4}" ] && mv -- "$i" "s${myDate:1:4}/${myartist[@]:1} - s${myDate:1:4}e${myDate:5:8} - ${myTitle[@]:1:40} _$i" || mv -- "$i" "${myartist[@]:1} - s${myDate:1:4}e${myDate:5:8} - ${myTitle[@]:1:40} _$i"
done

如何修改该脚本以识别是否存在冲突的年份/MMDD 文件,如果存在,请在剧集编号后附加适当的后缀,以便 plex 将它们解释为不同的剧集?

标签: bashyoutube-dlffprobeplex

解决方案


我最终实现了一个数组,计算数组中元素的数量,并使用它来追加整数:

#!/bin/bash
mySuff="$1"
echo mySuff="$mySuff"

if [ -z "$1" ]; then
        mySuff="*.mp4"
fi

for i in $mySuff
do
        prb=`ffprobe -- "$i" 2>&1`
        myDate=`echo "$prb" | grep -E 'date\s+:' | cut -d ':' -f 2`
        myartist=`echo "$prb" | grep -E 'artist\s+:' | cut -d ':' -f 2`
        myTitle=`echo "$prb" | grep -E 'title\s+:' | cut -d ':' -f 2 | sed 's/\//_/g'`
        cwd_stub=`pwd | awk -F'/' '{print $NF}'`
        readarray -t conflicts < <(find . -maxdepth 2 -iname "*s${myDate:1:4}e${myDate:5:8}*" -type f -printf '%P\n')
        [ ${#conflicts[@]} -gt 0 ] && _inc=${#conflicts[@]} || _inc=
        if [ -d "s${myDate:1:4}" ]; then echo "Directory found" > /dev/null; else mkdir "s${myDate:1:4}"; fi
        [ -d "s${myDate:1:4}" ] 
            && mv -- "$i" "s${myDate:1:4}/${myartist[@]:1} - s${myDate:1:4}e${myDate:5:8}$_inc - ${myTitle[@]:1:40} _$i" 
            || mv -- "$i" "${myartist[@]:1} - s${myDate:1:4}e${myDate:5:8}$_inc - ${myTitle[@]:1:40} _$i"
done

推荐阅读