Я хотел бы автоматизировать моющиеся файлы подзаголовка висячей строки на своем 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
Можно использовать 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
, затем делают что-то с текущим файлом.