Come organizzare / ordinare le immagini in base ai dati immagine EXIF


9

Ho recuperato le immagini da una partizione persa e devo ordinarle o inserirle in una cartella entro la data di creazione nei dati EXIF ​​di ciascuna immagine.

Ho installato digiKam e anche shotwell ma non ho trovato il modo di farlo su nessuna delle opzioni.

Qualcuno può spiegarmi come farlo con uno di questi programmi o con qualsiasi altro metodo?

Risposte:


14

La mia soluzione preferita è impostare la data del file uguale alla data della foto exif. In questo modo, è possibile ordinare i file utilizzando qualsiasi strumento di esplorazione file.

  1. Installa jhead ( apt-get install jhead)
  2. Vai alla directory delle foto ed esegui questo comando jhead -ft *. Ciò imposterà la data del file nel filesystem con la data di creazione dei metadati exif
  3. Ora vai al menu principale (in Ubuntu vai quasi sempre con il mouse nella parte superiore dello schermo del monitor), seleziona Visualizza → Ordina immagini → Per data.

Ordina immagini per data ordinerà i file in base alla data di creazione o modifica. Se hai appena recuperato molti file, tutti avranno lo stesso DATE. Per quanto ne so, i metadati EXIF ​​sono all'interno del file e non corrispondono necessariamente alla data del file stesso
Mauricio Gracia Gutierrez,

7

Consiglio di usare exiftool . Puoi installarlo con

sudo apt install exiftool

Ecco un comando di esempio che rinomina i file in base alla data di creazione nel formato AAAAMMGG e aggiunge un numero progressivo alla fine.

exiftool '-filename<CreateDate' -d %Y%m%d%%-.4nc.%%le -r

Ed ecco un comando di esempio che si sposta image.jpgin una directory con la data di creazione come nome, nel formato "AAAA-MM-GG".

exiftool -d %Y-%m-%d "-directory<datetimeoriginal" image.jpg

Ci sono altri comandi di esempio nella documentazione: https://sno.phy.queensu.ca/~phil/exiftool/filename.html


Scott, eseguo questo comando nella cartella in cui si trovano le immagini? Posso eseguirlo su una partizione montata NTFS sotto Ubuntu?
Mauricio Gracia Gutierrez,

2
Avvertenza obbligatoria - non provare questa sulla tua unica copia di queste foto - prima esegui una copia di backup in modo che, se vai su, puoi ricominciare da capo. Detto questo, riguardo alle tue domande: Sì, e penso di sì. Ad esempio, se le tue copie funzionanti sono archiviate in / home / me / Pictures / staging, dovresti cd /home/me/Pictures/stagingprima fare , quindi invocare exiftool.
Scott,

La stessa riga di comando funzionerà con MS Windows?
Mauricio Gracia Gutierrez,

Sulla base della lettura della descrizione sul sito Web dell'autore, credo di sì: "ExifTool è una libreria Perl indipendente dalla piattaforma più un'applicazione a riga di comando per la lettura, la scrittura e la modifica di meta informazioni in un'ampia varietà di file". Potrebbe esserci qualcosa di speciale che devi fare prima di poterlo richiamare dal prompt dei comandi di Windows (vedi sotto dove si dice "Eseguibile di Windows"), ma mi aspetto che tutti i comandi e i parametri siano gli stessi in tutte le piattaforme una volta che arrivare a quel punto.
Scott,

1

Un ottimo strumento è Rapid Photo Downloader

  1. Aggiunta del PPA

    sudo apt-add-repository ppa:dlynch3/ppa
    
  2. Aggiornamento e installazione

    sudo apt-get update
    sudo apt-get install rapid-photo-downloader
    

Usa la tua "partizione persa" come sorgente di input e configura il percorso / i nomi dei file di destinazione in base ai dati exif in Rapid Photo Downloader


Il PPA non è più mantenuto. Ho provato ad aggiungerlo e ho ricevuto questo messaggio: questo PPA non è più aggiornato. Per l'ultima versione di Rapid Photo Downloader, consultare damonlynch.net/rapid/download.html
Corey S.

1

Installa il processore batch di Phatch Photo. Dalle azioni predefinite, selezionare quello che rinomina i file con la data da exif.


1

Utilizzo più semplice: jhead -n%Y/%m/%d/%Y%m%d%H%M /Destination/*.jpg

Ordinerà, sposta e rinomina tutti i tuoi JPG dalla directory corrente alla bella struttura di directory con nomi di file univoci /Year/Month/Day/YearMonthDayHourMinute.jpg

Funziona solo con l'impasto di file * .jpg, non con RAW


Nota: prende i file dal percorso, che è specificato alla fine della riga di comando : jhead -n%Y/%m/%d/%Y-%m-%d--%H%M-- *.jpg
Vedavrat

1

Ora esiste un'estensione chiamata nautilus-colonne , che aggiunge dati EXIF, MP3 (ID3), PDF e altri metadati. Queste nuove colonne possono essere utilizzate anche come sorgente di ordinamento.

Installa con:

sudo add-apt-repository ppa:atarea/nautilus-extensions
sudo apt update
sudo apt install nautilus-columns


1

Questo è il codice che sto usando. Rinomina le foto aggiungendo AAAAMMGG_originalname.jpg

#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
    # ignore jpg that have 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
    if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
    :
    else
        # get the date and time from the tag
        DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
        echo "file_$PIC"
        # customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
        DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
        echo "datemod2_$DATEMOD2"
            # check if DateTimeOriginal was present
            if [[ "$PIC" == "$DATEMOD2$PIC" ]];then
            # as DateTimeOriginal is not present try with HistoryWhen
            DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
            DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
            echo "datemod2B_$DATEMOD2B"
                # check if HistoryWhen is present
                if [[ "$PIC" == "$DATEMOD2B$PIC" ]];then
                # nor the tag DateTimeOriginal, nor HistoryWhen present
                echo "skip"
                else
                # this will be done
                echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC""
                #uncomment if you like it
                #mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC"
                fi
            else
            # this will be done
            echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC""
            #uncomment if you like it
            #mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC"
            fi
     fi
fi
done

MODIFICARE. In questa modifica, la data nel tag viene passata al nome e anche all'attributo della data con tocco. Inoltre, se tali tag non esistono, la data del tag di modifica viene passata al nome del file.

#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
        echo "file_$PIC"
        # get the date and time from the tag DateTimeOriginal
        DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
        LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
            # check if DateTimeOriginal is 0000... OR empty
            if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
            echo "datetimeoriginal_$LONGDATE"
            # modify the attribute date with the info in the tag date
            touch -t $LONGDATE "$PIC"
            # customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
            DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
            echo "datemod2_$DATEMOD2"
                    # skip renaming if
                    # 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
                    if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
                    :
                    else
                    # this will be done

                    filename=$(basename "$PIC")
                    echo "$filename"
                    echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2""$filename"\""
                    #uncomment if you like it
                    mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2$filename"

                    fi
            else
            # get the date and time from the tag HistoryWhen

            DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
            LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')

            # check if Historywhen is 0000... or empty
                if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
                echo "historywhentag_$LONGDATE"

                touch -t $LONGDATE "$PIC"
                DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
                echo "datemod2B_$DATEMOD2B"

                    if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
                    :
                    else
                    # this will be done             
                    filename=$(basename "$PIC")
                    echo "$filename"
                    echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2B""$filename"\""
                    #uncomment if you like it
                    mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2B$filename"
                    fi

                else
                    # get the date and time from the tag tag filemodifydate

                    DATE=$(exiftool -p '$filemodifydate' "$PIC" | sed 's/[: ]//g')
                    LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')

                    # check if filemodifydate is 0000... or  empty
                    if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
                    #echo "filemodifydatetag_$LONGDATE"

                    #touch -t $LONGDATE "$PIC"
                    DATEMOD2C=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
                    echo "datemod2C_$DATEMOD2C"

                        if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
                        :
                        else
                        # this will be done             
                        filename=$(basename "$PIC")
                        echo "$filename"
                        echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2C""$filename"\""
                        #uncomment if you like it
                        mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2C$filename"
                        fi

                    else

                    echo "Error, NO date available"
                    fi
                fi
            fi
fi
done

Per l'ordinamento in cartelle (anno e mese) (AAAAMM):

exiftool "-Directory<DateTimeOriginal" -d "%Y%m" *
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.