Script per rinonimare file dalla macchina digitale con la data

Da MontelLUG.
Versione del 14 feb 2005 alle 17:22 di Cdron (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Script per rinominare file di immagini

Spesso è utile per catalogare le immagini acquisite con una macchina digitale poterle rinominare in modo coerente, includendo nel nome la loro data di generazione e una stringa che aiuti ad identificarle, numerando poi le immagini secondo un numero progressivo. Questo si può fare semplici script, che tengano conto della data del file immagazzinata nel sistema, oppure ancora meglio delle informazioni EXIF che ormai quasi tutte le macchine digitali incorporano nei file JPEG.

Versione POSIX - Data di sistema


#!/bin/sh

# Script per la rinominazione dei file
# della macchina fotografica con la data

# Parametri da linea si comando:
# N.1: Percorso che contiene i file
# N.2: Parte iniziale del nome da dare ai file

#Svuota il file delle date per essere sicuri che non esista
rm -f $1/filedate.txt
touch $1/filedate.txt
# La lista dei file viene ordinata secondo la data
for FILE in $(ls -t $1/*.jpg);
do
# Prende la data del file
DATA=$(stat --format=%y $FILE | cut -c 1-10)
# Verifica se la data e' la stessa di altri file precedenti
ESISTE=$(cat $1/filedate.txt | grep $DATA)
if [ -z $ESISTE ];
   then
   # Se la data e' nuova la aggiunge al file e porta il contatore a 1
   echo $DATA >> $1/filedate.txt
   NUM=$((1));
   else
   # Se la data e' la stessa di altri file incrementa il contatore
   NUM=$(($NUM+1));
fi
# Rinomina il file
mv $FILE $1/$2-$DATA\_$NUM.jpg;
done
# Cancella il file delle date
rm $1/filedate.txt

Spiegazione

Questo script si basa sulla data di sistema, quindi è compatibile con tutti i sistemi che usano la shell bash, e funziona di principio con ogni tipo di file, non soltanto i .jpg. In compenso non legge le informazioni EXIF, quindi la data sara quella in cui i file vengono downloadati nel disco fisso (a meno che non si rinomino direttamente nella memoria della macchina digitale). Il trucco principale sta nell'uso del parametro -t nel generare la lista di file per il ciclo for: questo consente che non ci siano ripetizioni nel file contenente le date e che quindi i numeri progressivi dei file che hanno la stessa data siano corretti e non ci siano sovrapposizioni o salti. Per ricavare la data del file si usa il comando stat piuttosto che ls perchè consente una maggiore flessibilità nelle informazioni da visualizzare sul file.