Questo script usa i pacchetti imagemagik ed  exif, perciò installare i pacchetti se non presenti nel sistema.
Rimando alla descrizione ad inizio listato del file per le operazioni eseguite dal programma.

#!/bin/bash
# -----------------------------------------------------------------------------
#       DESCRIZIONE
# -----------------------------------------------------------------------------
#
# Ogni fotocamera salva le foto con nomi diversi a seconda del modello.
# Supponiamo ora di copiare all'interno di una stessa directory tutte le foto di uno stesso evento,
# provenienti da fotocamere diverse.
# Aprendo la direcotry con un qualsiasi gestore file, i file vengono normalmente ordinati per nome.
# Il problema che si viene a creare è che le foto, così ordinate, perdono l'ordine cronologico.
# Si potrebbe ovviare utilizzando un qualsiasi programma per archiviare le foto... ma io non li uso! :)
# Perciò ho creato questo script per risolvere il problema, e già che c'ero ho introdotto
# qualche altra aggiunta per cui avevo necessità! :)
#
# Questo script può eseguire le seguenti operazioni:
# 1 - Ritagliare un certo valore di pixel tutto attorno alle foto.
# 2 - Cambiare la risoluzione delle foto
# 3 - Inserire un watermark selezionandone il grado di trasparenza.
#     L'inserimento avviene a foto già ridimensionata!
# 4 - Copmrimere la foto, a scapito della qualità ovviamente
# 5 - Rinominare le foto utilizzando DATA e ORA dei dati EXIF di ciascuna foto
#
# Le suddette operazioni vengono eseguite solo se si assegna "si" alle apposite variabili descritte in seguito.
# E' possibile, inoltre, personalizzare lo script agendo direttamente sulle variabili qui sotto.
# Elabora le foto nel formato JPEG ed estensione del file .jpg (maiuscolo o minuscolo)
# Per quanto riguarda il formato grafico del watermark ho provato solo con dei PNG
# per ovvi motivi di trasparenza, perciò non saprei il risultato utilizzando altri formati, proverò...
#
# Lo script, e l'eventuale watermark, vanno messi nella stessa direcotry delle foto.
# Lo script utilizza il pacchetto imagemagick.
#
#
# ---------------------------------
#   PERSONALIZZAZIONE SCRIPT
# ---------------------------------
# Dimensione a cui ridimensionare la foto
# Sono le dimensioni massime, la foto manterrà comunque le proporzioni!
dimensione_foto="800x600"

# Dimensioni totali del ritaglio in pixel, x e y.
xpix="8"
ypix="8"
 
# Livello % di trasparenza watermark (100 = nessuna trasparenza)
trasparenza_watermark="35"
 
# Posizione watermark nella foto:
# Possibili Posizioni: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast
posizione_watermark="SouthEast"
 
# Nome del file watermark
nome_watermark="watermark.png"
 
# Livello di compressione jpeg (100 = non compresso)
qualita_jpg="100"
 
# ---------------------------------
#   SCELTA OPERAZIONI DA ESEGUIRE
# ---------------------------------
# "si" o "no" (minuscolo) per ritagliare le foto
ritaglia="no"

# "si" o "no" (minuscolo) per ridimensionare le foto
ridimensiona="no"
 
# "si" o "no" (minuscolo) per inserire il watermark in ciascuna foto
inserimento_watermark="no"

# "si" o "no" (minuscolo) per comprimere le foto (usa la variabile qualita_jpg)
comprimi="no"
 
# "si" o "no" (minuscolo) per rinominare le foto usando DATA e ORA dei dati EXIF
rinomina_data="no"
 
 
 
# --------------------------------------------------------------
#                       INIZIO SCRIPT
# --------------------------------------------------------------
 
# Creazione array con il nome dei file della directory corrente con estensione "jpg" e "JPG"
echo ""
declare -a lista # Dichiarazione array "lista"
i=0
for f in *.jpg; do # ricerca nomi file con estensione in minuscolo
    if [ "$f" != "*.jpg" ]; then
      lista[$i]=$(echo $f)
      # echo $i" - "$f
      let i++
    fi
done
for f in *.JPG; do # ricerca nomi file con estensione in MAIUSCOLO
    if [ "$f" != "*.JPG" ]; then
      lista[$i]=$(echo $f)
      # echo $i" - "$f
      let i++
    fi
done
echo ""
totale=${#lista[*]}
echo "Totale foto: "${totale}
echo ""
echo ""
 
# Operazioni sui file
i=0
while [ $i -lt $totale ]; do
  echo "------------------------------------------"
  echo "In corso foto "$[$i+1]"/"${totale} ":" ${lista[$i]}
    echo ""
# ---- RITAGLIA -----
  if [[ $ritaglia == "si"  ]] ; then
    echo -n "Ritaglio..."
    larghezza=$(identify -format %w ${lista[$i]})
    let larghezza=(larghezza-xpix)
    altezza=$(identify -format %h ${lista[$i]})
    let altezza=(altezza-ypix)
    convert -quality $qualita_jpg -gravity Center -crop "$larghezza"x"$altezza"+0+0\! "${lista[$i]}" "${lista[$i]}"
    echo "Fatto!"
    echo ""
  fi
# ---- RIDIMENSIONA -----
  if [[ $ridimensiona == "si"  ]] ; then
    echo -n "Ridimensionamento..."
    convert -quality $qualita_jpg -resize $dimensione_foto "${lista[$i]}" "${lista[$i]}"
    echo "Fatto!"
    echo ""
  fi
# ---- WATERMARK -----
  if [[ $inserimento_watermark == "si"  ]] ; then
    echo -n "Inserimento Watermark..."
    composite -quality $qualita_jpg -dissolve $trasparenza_watermark -gravity $posizione_watermark $nome_watermark "${lista[$i]}" "${lista[$i]}" >> /dev/null
    echo "Fatto!"
    echo ""
  fi
# ---- COMPRIMI -----
  if [[ $comprimi == "si"  ]] ; then
    echo -n "Compressione..."
    convert -quality $qualita_jpg "${lista[$i]}" "${lista[$i]}"
    echo "Fatto!"
    echo ""
  fi
# ---- RINOMINA -----
  if [[ $rinomina_data == "si"  ]] ; then
    #  EXIF -t 0x9003 = 'Data (originale)'
    exif_time=$( exif -t 0x9003 "${lista[$i]}" 2>/dev/null | grep -oP '\d{4}.\d{2}.\d{2} \d{2}.\d{2}.\d{2}' )
    status=$?
    if [ "$status" == "0" ]  # Salta i file senza dati EXIF nel campo DATA
    then
      echo ${lista[$i]}" > "$exif_time
      prefix=$( echo "$exif_time" | sed -e 's/://g' -e 's/ /_/g' )_
      other_prefix="${prefix:0:13}_"
      newname1="${prefix}${lista[$i]}"
      newname2="${other_prefix}${lista[$i]}"
      echo -n "Rinomina file... "
      # echo ${lista[$i]}" > "$newname1 # Esempio nome1
      # echo ${lista[$i]}" > "$newname2 # Esempio nome2
      mv -Tv "${lista[$i]}" "$newname1"
      echo "Fatto!"
    else
      echo ${lista[$i]}" > Nessun dato EXIF... Non Rinominato!"
    fi
    echo ""
    echo ""
  fi
  let i=(i+1)
done
  echo ""
  echo "============"
  echo "...Finito!"
  echo "============"
  echo ""
exit 0