48 lines
3.1 KiB
Markdown
48 lines
3.1 KiB
Markdown
# Реорганизация common/ (HDD 4 TB)
|
||
|
||
Скрипт приводит папки игр в каталоге **common/** к виду: `GameName/GameName/` (файлы внутри) и кладёт `appmanifest_<AppID>.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_<AppID>.acf` в корне common/ или на уровень выше (steamapps/). Если манифеста нет, игра попадёт в блок **«Нет файла appmanifest»**; манифест нужно будет добавить вручную (скачать или создать).
|