Рекурсивно перемещать файлы субтитров в подкаталоги

Вопрос или проблема

Я в настоящее время запускаю plex на Beelink с Ubuntu, и на сегодняшний день все файлы, связанные с каждым фильмом (файл фильма, сопутствующие изображения и субтитры), находятся в одной родительской директории. В большинстве случаев это нормально, но для фильмов с несколькими субтитрами это может вызвать путаницу. Например:

    /Movies
       /Avatar (2009)
          Avatar (2009).mkv
          Avatar (2009).eng.srt
          Avatar (2009).en.forced.ass
          Avatar (2009).en.sdh.srt
          Avatar (2009).de.srt
          Avatar (2009).de.sdh.forced.srt

Кажется, что теперь plex находит субтитры, помещенные в папку “subs” или “subtitles”. Поэтому, чтобы навести порядок, как я могу рекурсивно пройтись по родительской директории фильмов и для каждой отдельной папки фильма переместить любые файлы субтитров в папку “subtitles” следующим образом?

/Movies
   /Avatar (2009)
      Avatar (2009).mkv
      /Subtitles
         Avatar (2009).eng.srt
         Avatar (2009).en.sdh.srt
         Avatar (2009).de.srt
         Avatar (2009).de.sdh.forced.srt

Для телешоу может быть несколько уровней под родительской папкой, например:

**Старое:**

/TV Shows
   /Игра престолов
      /Сезон 02
         Игра престолов - s02e03.mp4
         Игра престолов - s02e03.eng.srt
         Игра престолов - s02e03.en.forced.srt

**Новое:**

/TV Shows
   /Игра престолов
      /Сезон 01
         Игра престолов - s01e03.mp4
         Игра престолов - s01e04.mp4
         /Subtitles
           Игра престолов - s01e03.eng.srt
           Игра престолов - s01e04.eng.srt
      /Сезон 02
         Игра престолов - s02e03.mp4
         /Subs
           Игра престолов - s02e03.eng.srt
           Игра престолов - s02e03.en.forced.srt

Еще лучше было бы иметь возможность перемещать файлы только в том случае, если они не находятся уже в папке subtitles

find . -type f -name '*.srt' -printf '%h\0' | sort -zu | while IFS= read -d '' -r d; do
    printf "Создание '%s'...\n" "${d}/Subtitles"
    printf "Перемещение '%s' в '%s'...\n" "${d}/*.srt" "${d}/Subtitles"
done

Команда найдет путь к каждому файлу .srt в текущем рабочем каталоге рекурсивно, напечатает только его базовое имя и отфильтрует дубликаты, создавая директорию “Subtitles” внутри каждого полученного пути и перемещая каждый файл .srt на его уровень внутрь.

Она справится с файлами .srt, расположенными на любой глубине текущего рабочего каталога, а также с директорией “TV Shows”.

Команда выполнит пробный запуск; если вывод будет хорошим, выполните фактическую команду:

find . -type f -name '*.srt' -printf '%h\0' | sort -zu | while IFS= read -d '' -r d; do
    mkdir -p "${d}/Subtitles"
    mv "${d}"/*.srt "${d}/Subtitles"
done

% tree -a .
.
├── foo
│   └── bar
│       ├── baz
│       └── sub.srt
└── sub.srt

4 директории, 2 файла
% find . -type f -name '*.srt' -printf '%h\0' | sort -zu | while IFS= read -d '' -r d; do
    mkdir -p "${d}/Subtitles"
    mv "${d}"/*.srt "${d}/Subtitles"
done
% tree -a .
.
├── foo
│   └── bar
│       ├── baz
│       └── Subtitles
│           └── sub.srt
└── Subtitles
    └── sub.srt

6 директорий, 2 файла

Ответ или решение

Рекурсивное перемещение файлов субтитров в подпапки

Введение

Если вы используете Plex на Ubuntu и сталкиваетесь с проблемой организации файлов субтитров, то перестановка этих файлов в отдельные папки может значительно упростить управление медиатекой. Ниже приведено пошаговое руководство по рекурсивному перемещению файлов субтитров в отдельные папки "Subtitles" или "subs" для фильмов и телешоу, основываясь на схеме папок, описанной в вашей проблеме.

Проблема

Как видно из вашего описания, структура папок с фильмами и телесериалами может стать неупорядоченной из-за наличия множества файлов субтитров в одной папке. Plex предпочитает находит субтитры в папках "Subtitles" или "subs", и создание этих папок поможет улучшить восприятие и работу с вашей медиатекой.

Подход

Мы будем использовать команду find для рекурсивного поиска всех файлов субтитров в формате .srt и последующего их перемещения в соответствующие подпапки. Следующие команды сделают это автоматически для всех папок в указанной директории.

Шаги

  1. Откройте терминал на вашем Beelink под управлением Ubuntu.

  2. Перейдите в директорию с фильмами или телешоу. Например:

    cd /path/to/Movies
  3. Запустите команду для предварительного просмотра (dry run):

    find . -type f -name '*.srt' -printf '%h\0' | sort -zu | while IFS= read -d '' -r d; do
       printf "Creating '%s/Subtitles'...\n" "${d}"
       printf "Moving '%s/*.srt' to '%s/Subtitles'...\n" "${d}" "${d}"
    done

    Эта команда выведет список всех папок, где будут созданы подпапки "Subtitles", а также где будут перемещены файлы .srt. Пожалуйста, проверьте, выглядит ли вывод правильно.

  4. Выполнение перемещения:
    Если вывод был удовлетворительным, выполните следующую команду для фактического перемещения файлов:

    find . -type f -name '*.srt' -printf '%h\0' | sort -zu | while IFS= read -d '' -r d; do
       mkdir -p "${d}/Subtitles"
       mv "${d}"/*.srt "${d}/Subtitles"
    done

Описание команд

  • find . -type f -name '*.srt' -printf '%h\0': Находит все файлы с расширением .srt и выводит их директории.
  • sort -zu: Сортирует пути и удаляет дубликаты.
  • while IFS= read -d '' -r d; do ... done: Цикл, который обрабатывает каждый найденный путь.
  • mkdir -p "${d}/Subtitles": Создаёт папку "Subtitles", если она не существует.
  • mv "${d}"/*.srt "${d}/Subtitles": Перемещает все файлы субтитров в созданную папку.

Заключение

Теперь ваши файлы субтитров будут организованы в отдельных папках "Subtitles", что существенно упростит управление мультимедийным контентом на Plex. Эта схема также будет работать для телешоу, включая вложенные папки. Убедитесь, что вы выполнили команды в правильной директории и сделали резервные копии данных, если это необходимо.

Систематизация вашей медиатеки не только помогает в управлении файлами, но и улучшает общий опыт использования Plex.

Оцените материал
Добавить комментарий

Капча загружается...