Estoy rehaciendo uno de mis sitios y para asociar una lista de composiciones con sus ficheros de preview he optado por la vía del zero conf, lo que implica que los nombres de los ficheros han de casar con algún otro dato.
Dispongo de los datos de chopocientas piezas en un fichero YAML. Muestro solo la parte relevante al caso:
1- id: tenderness
2 title: Tenderness
3 collections:
4 - id: 50-miniature-studies-for-ukulele
5 order: 1
6
7- id: angel-island
8 title: Angel Island
9 collections:
10 - id: 50-miniature-studies-for-ukulele
11 order: 2
Y un montón de ficheros generados con nombres basados en ese número de órden (tipo no_1-a4.preview.png
) que necesito modificar para que estén basados en el identificador.
Esto es, donde tengo
no_1-a4.preview.png
me conviente tener
tenderness.png
yq es un procesador de ficheros YAML capaz de mil maravillas. Combinándolo con cuatro cosis de bash, la tarea estará hecha en un periquete.
Desgrano el comando bash que me ha resuelto un trabajo tedioso y propenso a error:
1# Selecciona los primeros 50 elementos del array
2# y para cada uno de ellos escupe en stdout su id y su order
3yq '.[:50] | .[] | [.id, .collections[0].order ]' -o tsv src/data/pieces.yml |
4# Lee cada línea de salida en un par de variables y renombra el fichero que toca
5while read -r name number; do
6 mv "${number}-a4.preview.png" "${name}.png";
7done
Au.