Как удалить файлы висячей строки?

Я хотел бы автоматизировать моющиеся файлы подзаголовка висячей строки на своем NAS, который обслуживает файлы KODI.

Когда я удаляю наблюдаемый телевизионный эпизод в 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
4
задан 12 December 2016 в 14:03

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, затем делают что-то с текущим файлом.

6
ответ дан 1 December 2019 в 09:21

Другие вопросы по тегам:

Похожие вопросы: