如何删除孤立文件?

如何删除孤立文件?

我想自动清理为 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,那么就对当前文件进行一些处理。

相关内容