Bash 腳本空白相容

Bash 腳本空白相容

我有大量的文件需要組織,它們是一個荒謬的資料夾結構中的 JPG 檔案。

我需要將所有文件從其實際位置移動到有組織的資料夾結構,將其實際位置保存為 EXIF 註釋,因為在路徑中需要保留資訊。

例如我有一個具有以下路徑的檔案:

/舊檔案/組織 1/1 精彩活動/1995 PIPPO 做了一些事情.jpg

目的地將類似於:Archive Digital/AA/1995_BB_000002.jpg

我的想法是從 OLD ARCHIVE/ 路徑運行腳本,以便獲得 fname var 中的所有資訊。然後從 fname var 中提取資訊並將它們放入 exif (和路徑)中,最後,移動記錄我正在做的事情的檔案。

我正在 bash 中編寫此內容,它可以工作,但在空白管理方面存在一些問題,因此我嘗試使其符合空白...但它不再工作了。

有人能幫我嗎?

提前致謝。

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

相關內容