# Реорганизация common/ (HDD 4 TB) Скрипт приводит папки игр в каталоге **common/** к виду: `GameName/GameName/` (файлы внутри) и кладёт `appmanifest_.acf` в корень папки игры. AppId берётся из **steam_library_with_sizes.json** по имени папки (сопоставление по нормализованному имени, не 100% точное). ## Что нужно - В CT 101 должны быть: `reorganize-games-common.sh`, `resolve_steam_appid.py`, `steam_library_with_sizes.json` (например в `/opt/scripts/`). - Корневая директория: `/mnt/nextcloud-extra/common/` (или путь 1-м аргументом). ## Подготовка (один раз) С хоста Proxmox (из репозитория plantUML): ```bash # Создать каталог в контейнере и залить файлы pct exec 101 -- mkdir -p /opt/scripts pct push 101 homelab/scripts/reorganize-games-common.sh /opt/scripts/ pct push 101 homelab/scripts/resolve_steam_appid.py /opt/scripts/ pct push 101 homelab/scripts/steam_library_with_sizes.json /opt/scripts/ ``` ## Dry-run (ничего не меняет) Показывает, что будет сделано, и в конце выводит **папки без совпадений** (по ним appId не найден в JSON — их можно проставить вручную и перезапустить): ```bash ssh root@192.168.1.150 'pct exec 101 -- bash /opt/scripts/reorganize-games-common.sh /mnt/nextcloud-extra/common 1 /opt/scripts/resolve_steam_appid.py /opt/scripts/steam_library_with_sizes.json' ``` ## Реальное выполнение Второй аргумент `0`: ```bash ssh root@192.168.1.150 'pct exec 101 -- bash /opt/scripts/reorganize-games-common.sh /mnt/nextcloud-extra/common 0 /opt/scripts/resolve_steam_appid.py /opt/scripts/steam_library_with_sizes.json' ``` ## Папки без совпадений Если в конце dry-run в блоке **«Папки, для которых не найден appId»** что-то есть — имена папок не совпали ни с одной записью в `steam_library_with_sizes.json`. Варианты: 1. Переименовать папку в common/ так, чтобы оно было ближе к названию в JSON, и снова запустить dry-run. 2. Добавить вручную маппинг: можно расширить `resolve_steam_appid.py` (словарь папка → appid) или положить рядом с папкой файл с appid и доработать скрипт — при необходимости можно добавить такой режим. ## Манифесты Скрипт ищет `appmanifest_.acf` в корне common/ или на уровень выше (steamapps/). Если манифеста нет, игра попадёт в блок **«Нет файла appmanifest»**; манифест нужно будет добавить вручную (скачать или создать).