Bash-Skripte sind Leerzeichen-kompatibel

Bash-Skripte sind Leerzeichen-kompatibel

Ich muss eine riesige Menge an Dateien organisieren. Es handelt sich um JPG-Dateien in einer absurden Ordnerstruktur.

Ich muss alle Dateien von ihrem tatsächlichen Speicherort in eine organisierte Ordnerstruktur verschieben und ihre tatsächliche Position als EXIF-Kommentar speichern, da im Pfad Informationen enthalten sind, die beibehalten werden müssen.

Ich habe beispielsweise eine Datei mit diesem Pfad:

/ALTES ARCHIV/ORGANISATION 1/1 FANTASTISCHES EVENT/1995 PIPPO tut etwas.jpg

Das Ziel sieht etwa so aus: Archive Digital/AA/1995_BB_000002.jpg

Meine Idee ist, das Skript vom Pfad „ALTES ARCHIV/“ aus auszuführen, um alle Informationen in der Variable „fname“ zu haben. Dann Informationen aus der Variable „fname“ extrahieren und in Exif (und in den Pfad) einfügen. Am Ende die Datei verschieben und protokollieren, was ich tue.

Ich schreibe dies in Bash. Es hat funktioniert, aber es gab ein Problem mit der Leerzeichenverwaltung, also habe ich versucht, es leerzeichenkompatibel zu machen … aber es funktioniert nicht mehr.

Kann mir jemand helfen?

Dank im Voraus.

#!/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";

verwandte Informationen