Compatible con espacios en blanco del script Bash

Compatible con espacios en blanco del script Bash

Tengo una gran cantidad de archivos que organizar, son archivos JPG en una estructura de carpetas absurda.

Necesito mover todos los archivos desde su posición real a una estructura de carpetas organizada, guardando su posición real como comentario EXIF ​​porque en la ruta hay información que preservar.

Por ejemplo tengo un archivo con esta ruta:

/ARCHIVO ANTIGUO/ORGANIZACIÓN 1/1 EVENTO FANTÁSTICO/1995 PIPPO hace algo.jpg

El destino será algo así como: Archive Digital/AA/1995_BB_000002.jpg

Mi idea es ejecutar el script desde la ruta ARCHIVO ANTIGUO para tener toda la información en fname var. Luego extraiga información de fname var y colóquela en exif (y en la ruta), al final, mueva el archivo registrando lo que estoy haciendo.

Estoy escribiendo esto en bash, estaba funcionando pero tenía algún problema con la administración de espacios en blanco, así que intenté hacerlo compatible con los espacios en blanco... pero ya no funciona.

¿Alguien me puede ayudar?

Gracias de antemano.

#!/bin/bash
#Parametri: CartellaOriginale CartellaOutput Prefisso NumeroIniziale Keywords
filenamePrefix="$3"
filenameNumber=$(printf "%05d" $4)
data=$(date +%F)
filelog="fileMovedLog_$data.txt"
CommonKeywords="$5"
echo "DEV Working on $1"
echo "DEV output folder $2"
echo "DEV filename start $filenamePrefix$filenameNumber"
echo "$1/$filelog"
echo "Backup in ${1%\/}_BAK/"
#echo "$data"
read -p "Press enter to continue"
echo 'Backup in corso'
#cp -R "$1" "${1%\/}_BAK/"
echo 'Backup terminato, inizio elaborazione'
#mkdir "$2"
touch "$1/$filelog"
find "$1" -name "*.jpg" -or -name "*.JPG" -type f -not -path "*_BAK"| while read fname; do
    echo "$fname"
#Chiedo l'anno
    forseAnno=$(echo `grep -oP  '(?<!\d)\d{4}(?!\d)' <<< "$fname"`)
    if [ -z "$forseAnno" ]
    then 
        forseAnno='ND'
    fi
    echo "Inserire cartella anno dove inserire la foto oppure lasciare vuoto se $forseAnno"
    read annoIn </dev/tty

    if [ -z "$annoIn" ]
    then #Se input è vuoto
        anno="$forseAnno"
    else #ho input, metto lì.
        anno="$annoIn"
    fi
    
    #echo "$anno"   
#Keyword per Lightroom
    #Estraggo alcune possibili KeyWord
    string=${fname,,}
    extraKey=''
    if grep -q 'palio' <<< "$string"; then
        extraKey=',palio del niballo'
    fi
    if grep -q 'dama' <<< "$string"; then
        extraKey="${extraKey},dama"
    fi
    if grep -q 'not' <<< "$string"; then
        extraKey="${extraKey},nott de biso"
    fi
    if grep -q 'cavaliere' <<< "$string"; then
        extraKey="${extraKey},cavaliere"
    fi
    if grep -q 'bigorda' <<< "$string"; then
        extraKey="${extraKey},bigorda"
    fi
    if grep -q 'corteo' <<< "$string"; then
        extraKey="${extraKey},corteo"
    fi
    if grep -q 'paggi' <<< "$string"; then
        extraKey="${extraKey},paggi"
    fi
    echo "$extraKey"
    read -e -p "Correggere le Keywords: " -i "$anno,$CommonKeywords$extraKey" KEYWORD </dev/tty
    suffix=$(printf "%05d" $filenameNumber)
    exiftool -p -Keywords='"$KEYWORD $fname"' -overwrite_original
#Registro il precedente nome file nella descrizione
    exiftool -p -Description+=\''ERA: "$fname"'\' "$fname" -overwrite_original  
    
#Sistemo la CreateDate
    echo `exiftool -wm cg -CreateDate=\'"$anno":01:01 00:00:00\' -overwrite_original "$fname"`
    if [ $? -ne 0 ] #avevo già una data
    then
        datafile=(exiftool -S -createdate "$fname")
        while true 
        do 
            if [ $anno -lt 2021 ] #la scrittura della data in EXIF la faccio solo se è un anno minore di 2021. Se ho messo 5060 per indicare anni 50-60 non lo metto
            then 
                    read -e -p "Sovrascrivere la data $datafile con $anno?[Yes/No/Vuoto]" -i "Y" yn </dev/tty
            else
                    read -e -p "Sovrascrivere la data $datafile con $anno?[Yes/No/Vuoto]" -i "N" yn </dev/tty
            fi
            case $yn in 
                [Yy]* ) exiftool -p -CreateDate=\'"$anno":01:01 00:00:00\' -overwrite_original;break;;
                [Nn]* ) break;; #Non fo una sega
                [0123456789][0123456789][0123456789][0123456789]* ) exiftool -p -CreateDate=\'"$yn":01:01 00:00:00\' -overwrite_original;break;;
                * ) echo "Inserire Y[es]/N[o] o l'anno";;
            esac
        done
    fi
#Procedo allo spostamento e logging
    echo 'Sposto '"$fname $2/$anno/$filenamePrefix$suffix.jpg"
    read -p "Confermi?"
    mv \""$fname"\" \""$2/$anno/$filenamePrefix$suffix.jpg"\"
    echo "\"$fname\"; \"$filenamePrefix$suffix.jpg\"" >>$1/$filelog
    ((filenameNumber++))
    echo ""
done
echo "Completato";

información relacionada