rinominare foto e convertire formato in batch

Ho importato più di 500 foto dall’iPhone in formato .HEIC (credo sia il formato usato per High Dinamic Range da Apple). Però aprendole col doppio click, invece di vederle in modo rapido con il programma di anteprima in Mint, mi si apriva sempre GIMP con la conferma per importare il profilo colore. Non riuscivo a scorrere rapidamente le foto.

Inoltre le foto mi servivano per fare un fotolibro, e volevo averle in ordine cronologico con la data e ora di scatto, quindi avevo bisogno di incorporare data e ora nel nome del file.

Cercando un po’ in rete e, un po’ nel manuale del comando ls ho tirato fuori questo script che copia le foto in una cartella nuova, per non modificare le originali, e le converte in JPG.

#!/bin/bash
for a in $(ls)
    do
        cp $a data/$(ls -la $a --time-style="+%y%m%d" | awk '{ print $6,"_",$7 }' OFS="")
    done
cd data
rm *incorpora*
/usr/bin/mogrify -format jpg *.HEIC

lo script lo avevo chiamato _incorpora_data.sh, e lo avevo messo nella stessa cartella delle foto originali, va lanciato da lì. Non ho messo controlli per verificare che la directory di destinazione esista, quindi va creata prima dei lanciare lo script. L’ho chiamata “data”. A fine operazione nella cartella “data” ci saranno tutte le immagini .HEIC convertite in .JPG

Sul PC deve essere installato il comando “mogrify”, fa parte del pacchetto ImageMagick e dovrebbe essere installato di default (su Mint Cinnamon 21.1 è così, su Mint 20 esiste mogrify ma non converte il formato HEIC).

Il risultato finale, nella cartella data, saranno tutte le foto HEIC, convertite in JPG e rinominate in modo da avere il nome del tipo yymmdd_nomefoto.jpg

Lo script cerca tutti file della cartella in cui si trova (quindi assicurarsi che ci siano le foto da rinominare/convertire), riportando nell’elenco la data nel formato %y%m%d (riga 4), poi passa il risultato al comando awk, che prende il campo n. 6 (=la data), ci aggiunge un underscore, e poi prende il campo n. 7 (=nome file), concatenandoli senza spazi (sarebbe il suo default) OFS=”” (Output Field Separator) e li copia nella directory “data”
Poi si sposta nella directory “data”, cancella la copia di sè stesso (rm *incorpora* , o meglio: cancella qualsiasi file che contenga “incorpora” nel nome, anche eventuali foto, ma le mie avevano tutte solo sigle alfanumeriche senza parole).

Infine passa ogni file il cui nome finisce in .HEIC al comando mogrify per convertirlo in jpg.

Lo script è il minimo indispensabile, non è molto raffinato e non fa controlli. Forse in futuro provo a migliorarlo.

Per ora funziona, e mi ha fatto risparmiare qualche ora di lavoro manuale.