Personalmente non utilizzo alcun programma per archiviare le mie foto, ma le raccolgo semplicemente in comunissime directory.
Per il loro ordinamento, quindi, mi affido solamente al nome del file stesso, già in un formato progressivo in quanto i file sono presi direttamente dalla fotocamera. Ci penserà il gestore dei file ad ordinare tutto in ordine alfabetico.
Molto spesso, però, mi capita di dover archiviare delle foto di un evento, ma scattate con fotocamere diverse. Poco male, basta copiare tutte le foto nella stessa directory e l'archivio è creato! ...quasi!
Il problema è che ogni fotocamera salva i file con un nome progressivo diverso, ed il risultato è che poi le foto non sono ordinate nella giusta sequenza cronologica.
Questo script legge la data di scatto di ciascuna foto direttamente dai dati EXIF delle stesse e rinomina poi ogni file utilizzando la data stessa.
A questo punto le foto saranno ordinate nella giusta sequenza cronologica.
Lo script utilizza i pacchetti imagemagik ed exif.
Attenzione all'estensione dei file! Poichè linux è case sensitive, rinominare prima tutti i file in minuscolo poichè lo script cercherà *.jpg e non *.JPG.
Basterà lanciare il comando:
rename 'y/A-Z/a-z/' *
Listato del file:
#!/bin/bash find . -type f -iname '*.jpg' | while read file do # exif -t 0x9003 = 'Date (original)' exif_time=$( exif -t 0x9003 "$file" 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 data salvata in exif o senza campo data then echo "$file" "$exif_time" vecchionome="${file##*/}" prefisso=$( echo "$exif_time" | sed -e 's/://g' -e 's/ /_/g' )_ altro_prefisso="${prefisso:0:13}_" # Generazione di 2 possibili nuovi nomi di file nuovonome1="${prefisso}${vecchionome}" nuovonome2="${altro_prefisso}${vecchionome}" # ------------------------------------ # ED ORA LE POSSIBILI AZIONI: # ------------------------------------ # Stampo a video i nomi dei file echo "$vecchionome" "$nuovonome1" "$nuovonome2" # Oppure salvo tutta la lista in un file di testo echo "$vecchionome" "$nuovonome1" >> nomefile.txt # Oppure rinomino direttamente i file con il nuovonome1 mv -Tv "$file" "$nuovonome1" fi done