[2026-09-26] eagle: personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
baf0274cb0
commit
157877d82f
1 file changed
+99
-5
@@ -4,7 +4,7 @@ created: '2026-09-26'
|
||||
updated: '2026-09-26'
|
||||
type: tech
|
||||
namespace: personal
|
||||
wave: 15
|
||||
wave: 17
|
||||
tags:
|
||||
- music
|
||||
- jellyfin
|
||||
@@ -20,7 +20,7 @@ related:
|
||||
|
||||
# Music Tags Repair — TrueNAS (7906 файлов)
|
||||
|
||||
> **Статус: ШЕСТНАДЦАТАЯ ВОЛНА (2026-09-26). КЛАСС C, КЛАСС A, КЛАСС 3, КЛАСС 4 — ЗАКРЫТЫ ПОЛНОСТЬЮ.
|
||||
> **Статус: СЕМНАДЦАТАЯ ВОЛНА (2026-09-26). КЛАСС C, A, 3, 4 ЗАКРЫТЫ + ЧИСТКА `no_change` ПРОДВИНУТА.
|
||||
> NAS ДОСТУПЕН, применение НЕ начато.**
|
||||
> Работа — ручной проход по CSV `tag-fix-plan.csv` построчно; правка скриптов ЗАПРЕЩЕНА.**
|
||||
> ✅ **Класс A («имя техпапки в artist/album») — ЗАКРЫТ ПОЛНОСТЬЮ: 0 остатков.**
|
||||
@@ -30,12 +30,15 @@ related:
|
||||
> ✅ **Класс 4 (транслит) — ЗАКРЫТ ПОЛНОСТЬЮ.** Наутилус (74), Король и Шут (34), Чиж & Со (12),
|
||||
> Центр (22), НТЛ (39), `Sbornik_Novij_Rok` (~90), На-На, Леонид Агутин, Каста, Кино, Пилот,
|
||||
> Влад Жуков, ГрОб. Ложные метки не тронуты (западные группы латиницей).
|
||||
> ❌ Осталось: **строки `no_change` (~1100, не проверялись)** — последний непроверенный пласт;
|
||||
> ✅ **СЕМНАДЦАТАЯ ВОЛНА: чистка `no_change` — вычищены сайты-источники, иероглифы,
|
||||
> числа-в-title, вода в album.** `Pushnoy.ru` (81 строка) → `Александр Пушной`.
|
||||
> ❌ Осталось: **добить `no_change` (1001 строка, часть легитимна)**;
|
||||
> затем бэкап `Music/backup/` → применение → приёмка в UI Alex → Music-библиотека Jellyfin.
|
||||
> Детали и таблицы — «ШЕСТНАДЦАТАЯ ВОЛНА».
|
||||
> Детали и таблицы — «СЕМНАДЦАТАЯ ВОЛНА».
|
||||
> ✅ **Проверка целостности (быстрая, без python):**
|
||||
> `/usr/bin/awk -F'"' 'NR>1 && NF%2==0 {print NR": "NF}' tag-fix-plan.csv` → пусто = 0 битых.
|
||||
> **CSV: 7907 строк (7906 данных + заголовок), 0 битых. Ручных правок: ~540.**
|
||||
> **CSV: 7907 строк (7906 данных + заголовок), 0 битых. Ручных правок: ~635.**
|
||||
> **`fix` 6905 / `no_change` 1001.**
|
||||
>
|
||||
> ---
|
||||
>
|
||||
@@ -70,6 +73,97 @@ related:
|
||||
> Прогонялись **девять волн** проверок: см. таблицу волн ниже.
|
||||
> Итог v7: «требует решения» **4**, medium **5811**, high **958**, mojibake = 0, остаточный mojibake = 0.
|
||||
|
||||
## 🖐 СЕМНАДЦАТАЯ ВОЛНА: ЧИСТКА `no_change` — САЙТЫ, ИЕРОГЛИФЫ, ВОДА (2026-09-26)
|
||||
|
||||
> Триггер: Alex — **«Продолжай до конца»**, затем **«Можешь точечно использовать батч правки
|
||||
> убедившись что они применятся правильно»** (разрешение на батч-метод).
|
||||
> Прерывание: **«Остановись и забэкапь файл»** → бэкап `bak-20260926-180619` → продолжение.
|
||||
>
|
||||
> 🔴 ГЛАВНЫЙ КЛАСС ЭТОЙ ВОЛНЫ — **сайты-источники и вода, попавшие в `new_artist`/`new_album`/`new_title`**.
|
||||
> Строки `no_change` (~1000) не проверялись ни разу — там лежал мусор сотнями строк.
|
||||
|
||||
### 🛠 ЧТО ВЫЧИЩЕНО (по типам дефектов)
|
||||
|
||||
| Дефект | Строк | Фикс |
|
||||
|---|---:|---|
|
||||
| **`Pushnoy.ru` в `new_artist`** (папка пародий Александра Пушного) | **81** | → `Александр Пушной`. 5 батчей по album: `2005-2006` (7), `старые` (26), `Pushnoy.ru NEW` (17), `демки` (7), `2007` (11), плюс одиночные (`+/`, `Bachilo-aha-ru`) |
|
||||
| `P@X@Tu*HCK*u` в artist (пиратский водяной знак) | 2 | `Kid Cudi & Collie Buddz` / `Freemasons & Sophie Ellis-Bextor` |
|
||||
| `PiratMusic.ru - Рэпер Сява` в artist | 1 | → `Рэпер Сява` |
|
||||
| **Иероглифы UTF-16** (`ᬄ㔄䈄…`) — `Олег Митяев/Лето это маленькая жизнь.mp3` | 1 | → `Лето - это маленькая жизнь` / `Олег Митяев` |
|
||||
| Вода `[muzmo.ru]` / `[mp3ex.net]` в `new_title` | 3 | вырезана |
|
||||
| Вода `Mp3-Az.com`, `www.mp3arena.ru`, `Renat.promodj.ru`, `utmostdjs@inbox.ru`, `www.mp3ex.net`, `www.Ostrov-Ok.net`, `www.musicdjsmp3.com`, `www.katyafirst.ru`, `mp3ex.net`, `4ump4.com` в `new_album` | ~12 | вырезана из `new_*` (`cur_*` не трогаются) |
|
||||
| `(Sefon.Pro)` / `(Sefon.me)` в `new_title` | 5 | вырезано (Пионерлагерь Пыльная Радуга, Канцлер Ги, КняZz ×2) |
|
||||
| `melody.az - КняZz - Корсар` в title+artist | 1 | → `Корсар` / `КняZz` |
|
||||
| `Князь` (старое имя) → `КняZz` (по папке) | 1 | `Стальные кандалы` / `КняZz` |
|
||||
| Число в `new_title` (номер трека попал в название) | 6 | `1100`→track 4 (Ария); `11`→`Истерика`/`Агата Кристи`; `120`→`Гурод`/`Звери`, album `Голод`, track 3; `48`→track 5; `11 - 11`→track 11; `06 Unknown`→track 6 (Пилот) |
|
||||
| `Рок-Группа` в `new_artist` (мусорный artist) | 3 | title начисто: `Попса`, `Кошка`; `Бесы` + artist `Пилот` |
|
||||
| `Prodigy - Smack My Bitch Up (Sub Focus Remix)` в title | 1 | → title `Smack My Bitch Up (Sub Focus Remix)`, artist `The Prodigy` |
|
||||
| `Нечётный Воин-2` в artist | 1 | → `Капли о стекло` / `Нечётный Воин-2` |
|
||||
|
||||
### 🔴 ПИТФОЛЛ ВОЛНЫ: `new_*`-КОЛОНКИ НЕ ТАМ, ГДЕ ЖДЁШЬ (сдвиг из-за запятых)
|
||||
|
||||
`awk -F','` даёт сдвиг колонок на строках с запятыми/кавычками в `path`. **Позиция полей
|
||||
зависит от числа полей в строке** (11 / 12 / 13 / 14). Диагностика одной строки:
|
||||
|
||||
```bash
|
||||
sed -n '<N>p' tag-fix-plan.csv | awk -F',' '{for(i=1;i<=NF;i++) print i": "$i}'
|
||||
```
|
||||
|
||||
Пример: в строке `"!Pop, Club, Любэ/..."` (запятые в пути) `new_artist` оказывается в **9-й**
|
||||
колонке, а не в 7-й. Для 11-полевых строк — 7-я. Универсальный детектор с учётом сдвига:
|
||||
|
||||
```bash
|
||||
awk -F',' 'NR>1 {n=NF; na=(n==11)?7:((n==13)?9:((n==12)?8:0));
|
||||
if(na && $na ~ /МАРКЕР/) print NR"|"n"|"$na}' tag-fix-plan.csv
|
||||
```
|
||||
|
||||
> ⚠️ `cur_album`, `cur_title`, `cur_artist` — **НЕ ПРАВИТЬ** без явного слова Alex.
|
||||
> Вода в `cur_*` — норма (исходные испорченные теги, остаются как история). Чистится только `new_*`.
|
||||
|
||||
### 🛠 МЕТОД БАТЧ-ПРАВОК — ПОДТВЕРЖДЁН (второй раз)
|
||||
|
||||
`patch mode=patch` с несколькими ханками применяется **атомарно**: если хоть один ханк не
|
||||
найден — не пишется ничего (`Patch validation failed... no files were modified`).
|
||||
Сбой записи (`Failed to write file: [Command interrupted]`) **файл не портит** — проверено
|
||||
сравнением с бэкапом (размер идентичен).
|
||||
|
||||
**Обязательная проверка после каждого батча:**
|
||||
```bash
|
||||
wc -l < tag-fix-plan.csv # 7907
|
||||
awk '!/\r$/{c++} END {print "без CR: "c+0}' tag-fix-plan.csv # 0
|
||||
awk -F'"' '{print NF-1}' tag-fix-plan.csv | awk '$1%2!=0' | wc -l # 0
|
||||
```
|
||||
|
||||
### 📊 СОСТОЯНИЕ НА КОНЕЦ СЕМНАДЦАТОЙ ВОЛНЫ
|
||||
|
||||
| Показатель | Значение |
|
||||
|---|---:|
|
||||
| Строк в CSV | 7906 (+1 заголовок = 7907 в файле) |
|
||||
| Битых строк | **0** |
|
||||
| CRLF-потерь | **0** |
|
||||
| Ручных правок (`source = manual (user decision)`) | **~635** |
|
||||
| `fix` / `no_change` | **6905 / 1001** |
|
||||
| Сайтов-источников в `new_artist` | **0** |
|
||||
| Иероглифов (UTF-16) в CSV | **0** |
|
||||
| Пустых пар `new_title`+`new_artist` | **0** |
|
||||
| Класс C / A / 3 / 4 | ✅ **ЗАКРЫТЫ** |
|
||||
| Строки `no_change` (1001) | 🔄 **ЧАСТИЧНО ВЫЧИЩЕНЫ** (сайты, вода, иероглифы, числа) |
|
||||
| Применение на NAS | **НЕ начато** |
|
||||
|
||||
**Бэкапы этой волны:** `bak-20260926-180619`, `bak-20260926-183432`, `bak-20260926-183541`.
|
||||
|
||||
### ⏭ ЧТО ДЕЛАТЬ ПЕРВЫМ ДЕЛОМ В СЛЕДУЮЩЕЙ СЕССИИ
|
||||
|
||||
1. **Добить `no_change` (1001 строка)** — часть легитимна (`Green Apelsin`, `Guf`, западные группы,
|
||||
`O.K.`/`STILL LIFE` у Чижа). Искать: вода в `new_title`/`new_album`, числа в title,
|
||||
обрезанные значения, мусорные artist (`01`, `Unknown Artist`). Детекторы (с учётом сдвига!):
|
||||
```bash
|
||||
awk -F',' 'NR>1 && $6 ~ /www\.|\.ru|\.com|\.net|muzmo|zvukoff|Sefon/ {print NR"|"$6}' tag-fix-plan.csv
|
||||
awk -F',' 'NR>1 {n=NF; na=(n==11)?7:((n==13)?9:((n==12)?8:0)); if(na && $na ~ /www\.|\.ru$|\.net$/) print NR"|"$na}' tag-fix-plan.csv
|
||||
```
|
||||
2. Только после этого — **бэкап `Music/backup/` → применение → приёмка в UI Alex** →
|
||||
Music-библиотека Jellyfin.
|
||||
|
||||
## 🖐 ШЕСТНАДЦАТАЯ ВОЛНА: КЛАСС 4 (ТРАНСЛИТ) ЗАКРЫТ ПОЛНОСТЬЮ (2026-09-26)
|
||||
|
||||
### ✅ КЛАСС 4 — ЗАКРЫТ ЦЕЛИКОМ
|
||||
|
||||
Reference in new issue
Block a user