Intereting Posts
Intel Графическая ошибка: i915 имеет фиктивное выравнивание Почему мой Linux-сервер зависает с "ps aux" Половина моего программного обеспечения ушла; любой способ выздороветь? Малый распределенный вычислительный кластер Убейте браузер при блокировке экрана Как я могу заставить tmux tell bash отобразить * логическую * версию текущего каталога в недавно открытых окнах? Создать архив tar, разбитый на блоки максимального размера Довольно печатать в VIM? Дублируйте источники в APT-файлах Ubuntu 14.10, они в порядке? ") Ошибка синтаксиса Недействительный арифметический оператор (маркер ошибки" Чтение столбцов из файла, затем столбец в exsisting CSV-файл Разрешено ли оболочке оптимизировать бесполезные команды завершения? Предоставляет доступ пользователю root в течение определенного периода времени psmouse serio1 неизвестное оборудование и мышь / тачпад работают ТОЛЬКО в режиме спасения Ошибка статистики журнала не удалась: разрешение отклонено во время LogRotation

Перемещение частично совпадающих файлов, которые уже существуют (PLC-транскодер)

Я пытаюсь понять, как писать это как «стандартный» сценарий bash (работает в QNAP), но не уверен, с чего начать – я могу сделать это в NodeJS (так как я все время использую его для своей работы) , но на самом деле было бы что-то.

Я ищу указатели на то, как это сделать, а не на фактический сценарий (хотя не позволяйте этому останавливать вас) 😉

Использование встроенных преобразованных файлов Plex (для совместимости и т. Д.) – вход в это дерево папок с различными файлами фильмов (чаще всего используются расширения .avi, .mp4 или .mkv), которые затем затем превращаются в файл .mp4 в несколько иной путь.

Я хочу скопировать (не двигаться – я позволю Plex очистить свой беспорядок) выходные файлы Plex обратно по входным файлам.

Пример структуры – от …

 Версии Plex / оптимизированы для мобильных / My Tv Show / S01E01.mp4

… до …

 My TV Show (1990-1995) / Сезон 1 / s01e01 Мой эпизод Name.mkv

Заметки:

  • Корневой путь для обоих одинаковый (для моей установки у других может быть папка Plex Versions папке My TV Show (1990-1995) – этот скрипт пойдет на GitHub, когда закончится и т. Д.).

  • Имя ТВ-шоу может измениться. Я помещаю в скобки дату начала и окончания (или завершающую - если продолжается). Plex будет использовать «официальное» имя, которое может иметь начальный год, если есть более одного шоу с тем же именем.

  • Принимая во внимание вышеизложенное, я могу иметь несколько шоу с тем же базовым именем, но разными годами.

  • Базовое имя цели будет находиться в папке Season x (номер сезона без ведущего 0 ) и иметь тот же префикс.

  • Если это сезон 0, тогда он может быть в папке Specials/ (в какой-то момент я получу последовательность).

  • Если исходное имя файла имеет имя файла .mp4, то скопированный целевой файл должен иметь имя файла .m4v.

  • После копирования нового файла исходный файл можно удалить (оставив исходный код и целевые файлы).

Если бы я делал это в NodeJS, я бы сделал что-то вроде следующего:

  1. Получите отсортированный список папок телешоу (более ранние шоу обычно не имеют лет, а более поздние).
  2. Для каждой папки regex замените конечные годы ( /-\d*\)/ на "" чтобы включить только начальный год, а также нечувствительность к регистру для папок Plex. Если нет совпадения, попробуйте без какого-либо года.
  3. Если совпадение не найдено, вернитесь к 2 и повторите попытку.
  4. Получите список файлов версии Plex, которые соответствуют шаблону /S\d+E\d+\.mp4/ (там могут быть субтитры, включенные с того момента, когда я просто разорвал все и не фильтровал потоки).
  5. Для каждого файла получите номер сезона, затем найдите папку Season x для того же префикса. Если это сезон 0, то также найдите папку Specials .
  6. Замените расширение на совпадающее имя на .mp4, если никакая замена не была выполнена, замените его на .m4v.
  7. Скопируйте файл Plex в новый путь + имя.
  8. Удалите сопоставленный файл, затем вернитесь к 5.

Теперь переменные для имен, которые я могу сделать, одинаковые для очевидного unlink – с чем мне хотелось бы помочь –

Лучший способ сделать начальное сопоставление папок (лучше всего 1-3, или есть лучший ярлык?). Посмотрите на это: скопируйте файлы в папку назначения только в том случае, если файлы уже существуют, но исходные файлы имеют другой файл расширение )

Проверка наличия файла и попытки использовать разные комбинации расширений, если нет.

edit: существует более 30 тбайт файлов, а Plex не заменяет исходные файлы (с него был открыт запрос с 2015 года).

Я лично предложил бы использовать FFmpeg для преобразования файлов в вашу основную папку Plex Library. Что-то вроде:

 set -s globstar; for f in ./**/*.{avi,mp4,mkv}; do ffmpeg -i "$f" -c:a aac -c:v libx264 -preset slow "${f%.*}_b.mp4" rm "$f" mv "${f%.*}_b.mp4" "${f%.*}.mp4" done 

Вы также можете просто настроить Plex для хранения вашей оптимизированной версии в каталоге исходных файлов.

При этом этот код может делать то, что вы ищете, но он полностью не тестировался:

 Plex_Main="/Main/Plex/Dir/" Optimized="/Optimized/Versions/Dir/" for DIR in "$Optimized"/*; do if [[ -d "$DIR" ]]; then SHOW_MATCHES=("$Plex_Main"/*"$(basename "$DIR")"*/) # If there is one, and only one, match if [[ ${#SHOW_MATCHES[@]} -eq 1 ]]; then # The non-optimized show path SHOW_PATH="$Plex_Main"/*"$(basename "${DIR[0]}")"* for f in "$DIR"/*.mp4; do # Remove file extension EP_ID="${f%.*}" EP_MATCHES=("$SHOW_PATH"/*"${EP_ID[0]}"*) if [[ ${#EP_MATCHES[@]} -eq 1 ]]; then ORIG_FILE="${EP_MATCHES[0]}" cp "$f" "$SHOW_PATH/${ORIG_FILE%.*}.mp4" fi done fi fi done