我想自动清理为 KODI 提供文件的 NAS 上的孤立字幕文件。
当我在 KODI 中删除观看过的电视剧集时,它会将目录中相应的字幕文件保留原样。
我想要一个 Bash 脚本来递归遍历电视文件夹并删除字幕文件(.srt,有时也表示不同语言的 .xx.srt,其中 xx 是 2 个字母的语言代码)不是有相应的.mkv、.avi 或 .mp4 文件。
我的文件夹结构如下:
-TV
|-Show 1
| |-Season 01
| |-Season 02
| |-Show 1 S02E01.mkv
| |-Show 1 S02E01.srt
| |-Show 1 S02E02.avi
| |-Show 1 S02E02.srt
|
|-Show 2
| |-Season 03
| |- Show 2 S03E02.mp4
|- Show 2 S03E02.en.srt
|- Show 2 S03E02.sv.srt
删除剧集后它看起来像这样:
-TV
|-Show 1
| |-Season 01
| |-Season 02
| |-Show 1 S02E01.srt
| |-Show 1 S02E02.mp4
| |-Show 1 S02E02.srt
|
|-Show 2
| |-Season 03
|- Show 2 S03E02.en.srt
|- Show 2 S03E02.sv.srt
答案1
您可以使用for
循环和一些测试
for f in Show*/Season*/*.srt; do if [[ ! -f "${f%%.*}.mkv" ]] && [[ ! -f "${f%%.*}.mp4" ]] && [[ ! -f "${f%%.*}.avi" ]]; then echo rm -v -- "$f"; fi; done
测试后删除echo
文件
作为脚本:
#!/bin/bash
for f in Show*/Season*/*.srt; do
if [[ ! -f "${f%%.*}.mkv" ]] &&
[[ ! -f "${f%%.*}.mp4" ]] &&
[[ ! -f "${f%%.*}.avi" ]]; then
echo rm -v -- "$f"
fi
done
删除后echo
才能真正完成工作,如果您看到它将删除正确的文件......
if [[ ! -f "${f%%.*}.mkv" ]]; then
意思是,如果不存在我们正在处理的文件,并且其扩展名.mkv
不是.srt
,那么就对当前文件进行一些处理。