我有大量的文件需要整理,它们是位于荒谬的文件夹结构中的 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";