Script per a generar automàticament a partir d'un conjunt de fitxers, una seqüència de 'ZIP' que contingui cada un dels fitxers, el seu respectiu 'FILE_ID.DIZ' i els fitxers de suport necessaris.
## Situació
A `Eye Of The Beholder BBS` tots els elements que s'ofereixen als usuaris, a través de la seva base de fitxers, respecten les següents característiques:
- Es presenten comprimits en format `ZIP`.
- Inclouen un fitxer de descàrrec (`DISCLAIMER`).
- Inclouen un fitxer de demo i/o publictat de `EOTB`.
- Inclouen el fitxer de descripció de l'element (`FILE_ID.DIZ`).
### Problema
El programari `BBBS` no implementa cap utilitat que permeti generar aquest paquetitzat de fitxers d'una manera automàtica.
Si bé per a la preparació d'e fitxers'elements individuals es pot optar per l'operació manual, davant de situacions on cal preparar una quantitat seqüencial d'elements la manualitat es converteix en una operació feixuga i tediosa.
Imaginem alguns casos d'aquests elements seqüencials:
- Col·leccions de fitxers (p. ex. una sèrie de capítols d'un còmic, a fitxer per capítol)
- Fitxers serialitzats (p. ex. un fitxer de gran mida comprimit en volums, a fitxer per volum)
- Conjunt de fitxers independents en una carpeta comuna (p. ex. les fotografies diàries que fa la NASA, a fitxer per foto)
En qualsevol d'aquests casos, l'esforç és molt superior al benefici i, en el meu cas, justifica que tingui *terabytes* d'informació pendents d'incorporar a `EOTB`.
## Solució
He desenvolupat `mass-diz.sh`, un *script* en `bash` que ha de donar resposta a aquesta necessitat, com a eina de suport pròpia i de qualsevol altre `SysOp`.
`mass-diz.sh` empaqueta en un `ZIP` els diferents elements i els annexes necessàris, incloent-hi el `FILE_ID.DIZ` associat que es genera durant l'execució.
### Requisits
`mass-diz.sh` necessita que les utilitats `read`, `zip`, `file` i `echo` estiguin disponibles al sistema per tal de poder efectuar les operacions necessàries.
Tanmateix, aquest *script* s'ha provat en un `shell``bash` compatible, de manera que si fas servir un altre `shell` pot ser necessari ajustar-lo en corcondança. Això podria aplicar-se a `Windows WSL` fent possible executar aquest *script* en qualsevol instal·lació de programari `BBS` sobre `MS Windows`.
### Funcionalitat:
`mass-diz.sh` està pensat per a processar seqüencies de fitxers pertanyents a col·leccions, el nom dels quals respecti una estructura semblant i aporta tota l'informació sobre el fitxer en valors separats per un conjunt de caracters determinats:
P.ex. `Daredevil Born Again - Season 1 - Chapter 2 - 1080p - 2025.mkv`
- **Variables Inicials**: L'*script* parteix d'un conjunt de variables fixes, que s'inicialitzen durant la seva execució:
-`DISCLAIMER`: El nom del fitxer[^1] informatiu de descàrrec quan l'element és un contingut sensible.
-`DEMO`: El nom del fitxer [^1] que fa les funciones de publicitat/promoció de `EOTB`.
-`SEPARATOR`: El caràcter o conjunt de caràcters que identifiquen els diferents camps de la descripció de l'element.
-`FILE_ID`: S'alimenta automàticament durant l'execució de l'*script*.
-`ZIPFILE`: El nom base que tindrà el fitxer `ZIP` resultant.
-`ZIPSEQ`: El número de seqüència inicial que es concatenarà a la variable `ZIPFILE`.
`mass-diz.sh` processarà tots els fitxers existents a la ruta on se l'invoqui, a excepció dels que es defineixin a les variables `DISCLAIMER` i `DEMO`.
El primer fitxer definirà el patró de comportament que l'*script* tindrà, tant per aquest com per a la resta de fitxers.
L'*script* analitzarà el nom complet utilizant com a separador el valor de la variable `SEPARATOR`.
Per a cada valor identificat entre separadors, preguntarà el nom d'una nova variable que informarà amb el valor identificat. Per al valor d'extensió del fitxer (assumint-lo a la dreta del punt), ha de preguntar també el nom de la variable.
Un cop s'hagi analitzat el nom i extensió del fitxer, i tot el seu contingut estigui informat en variables, l'*script* sol·licita ordenar-les.
A continuació, s'informarà la variable `FILE_ID` (no inicialitzada) concatenant les variables existents amb les següents condicions:
- La variable `TITLE` es converteix a majúscules i s'aboca a la variable `FILE_ID`.
- La resta de variables, s'aboquen una per línia, segons l'ordre establert, respectant un format `clau: valor`.
- A cada línia, la variable es converteix en la clau de línia (el mateix nom de la variable sense el símbol `$`), concatenant el símbol `:`, afegint un espai, i abocant el valor de la variable.
La variable `FILE_ID` s'abocarà a un nou fitxer amb el nom fixe establert `FILE_ID.DIZ` que contindrà un màxim de 45 caràcters per línia.
En aquest punt, es comprimirà en format `ZIP` el fitxer processat, el fitxer `FILE_ID.DIZ`, més els fitxers de les variables `DISCLAIMER` i `DEMO`. El nom d'aquest `zip` és el resultant de concatenar els valors de les variables `ZIPFILE` i `ZIPSEQ`.
Després del comprimit amb èxit, s'esborra el fitxer `FILE_ID.DIZ`.
A continuació, es suma `1` a la variable `ZIPSEQ`, i es torna a executar el procés per a la resta de fitxers presents a la ruta on s'ha executat l'*script*, assumint l'ordre establert en l'execució del primer fitxer processat.
### Execució:
En el `path` on s'executa:
- **Únic mode d'execució**: `mass-diz.sh`
`<EOF>`
[^1]: El fitxer ha d'estar present a la ruta on s'executi l'*script*.