So organisieren / sortieren Sie Bilder nach EXIF-Bilddaten


9

Ich habe Bilder von einer verlorenen Partition wiederhergestellt und muss sie sortieren oder bis zum Erstellungsdatum in den EXIF-Daten jedes Bilds in einem Ordner ablegen.

Ich habe digiKam und auch shotwell installiert, aber bei keiner der Optionen den Weg gefunden, dies zu tun.

Kann mir jemand erklären, wie es mit einem dieser Programme oder mit einer anderen Methode geht?

Antworten:


13

Meine Lieblingslösung besteht darin, das Dateidatum auf das exif-Fotodatum einzustellen. Auf diese Weise können Sie die Dateien mit einem beliebigen Datei-Explorer-Tool sortieren.

  1. Installiere jhead ( apt-get install jhead)
  2. Gehen Sie zum Fotoverzeichnis und führen Sie diesen Befehl aus jhead -ft *. Dadurch wird das Dateidatum im Dateisystem mit dem Erstellungsdatum der Exif-Metadaten festgelegt
  3. Gehen Sie jetzt einfach zum Hauptmenü (in Ubuntu fahren Sie meistens mit der Maus über den oberen Bildschirmrand) und wählen Sie Ansicht → Bilder sortieren → Nach Datum.

Bilder nach Datum sortieren sortiert die Dateien nach dem Datum, an dem sie erstellt oder geändert wurden. Wenn Sie gerade viele Dateien wiederhergestellt haben, haben alle das gleiche DATUM. Nach meinem Verständnis befinden sich die EXIF-Metadaten in der Datei und stimmen nicht unbedingt mit dem Datum der Datei selbst überein
Mauricio Gracia Gutierrez

7

Ich empfehle die Verwendung von exiftool . Sie können es mit installieren

sudo apt install exiftool

Hier ist ein Beispielbefehl, der die Dateien basierend auf dem Erstellungsdatum im Format JJJJMMTT umbenennt und am Ende eine Sequenznummer anfügt.

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

Und hier ist ein Beispielbefehl, der image.jpgin ein Verzeichnis mit dem Erstellungsdatum als Namen im Format 'JJJJ-MM-TT' verschoben wird.

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

Weitere Beispielbefehle finden Sie in der Dokumentation: https://sno.phy.queensu.ca/~phil/exiftool/filename.html


Scott, führe ich diesen Befehl in dem Ordner aus, in dem sich die Bilder befinden? Kann ich dies auf einer NTFS-gemounteten Partition unter Ubuntu ausführen?
Mauricio Gracia Gutierrez

2
Obligatorisches Warnwort - versuchen Sie dies nicht bei Ihrer einzigen Kopie dieser Fotos - erstellen Sie zuerst eine Sicherungskopie, damit Sie von vorne beginnen können, wenn Sie es vermasseln. Zu Ihren Fragen jedoch: Ja, und ich denke schon. Wenn Ihre Arbeitskopien beispielsweise in / home / me / Pictures / staging gespeichert sind, würden Sie dies cd /home/me/Pictures/stagingzuerst tun und dann exiftool aufrufen.
Scott

Funktioniert dieselbe Befehlszeile für MS Windows?
Mauricio Gracia Gutierrez

Basierend auf dem Lesen der Beschreibung auf der Website des Autors glaube ich: "ExifTool ist eine plattformunabhängige Perl-Bibliothek sowie eine Befehlszeilenanwendung zum Lesen, Schreiben und Bearbeiten von Metainformationen in einer Vielzahl von Dateien." Möglicherweise müssen Sie etwas Besonderes tun, bevor Sie es über die Eingabeaufforderung in Windows aufrufen können (siehe unter "Windows Executable"), aber ich würde erwarten, dass alle Befehle und Parameter auf allen Plattformen gleich sind, sobald Sie dies tun an diesen Punkt kommen.
Scott

1

Ein großartiges Tool ist Rapid Photo Downloader

  1. PPA hinzufügen

    sudo apt-add-repository ppa:dlynch3/ppa
    
  2. Aktualisieren und installieren

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

Verwenden Sie Ihre "verlorene Partition" als Eingabequelle und konfigurieren Sie den Zielpfad / die Dateinamen basierend auf Ihren Exif-Daten in Rapid Photo Downloader


Die PPA wird nicht mehr gepflegt. Es wurde versucht, es hinzuzufügen, und es wurde folgende Meldung empfangen: Diese PPA ist jetzt veraltet. Die neueste Version von Rapid Photo Downloader finden Sie unter damonlynch.net/rapid/download.html
Corey S.

1

Installieren Sie den Phatch Photo Batch-Prozessor. Wählen Sie aus den vordefinierten Aktionen die aus, die die Dateien mit dem Datum von exif umbenennt.


1

Am einfachsten mit: jhead -n%Y/%m/%d/%Y%m%d%H%M /Destination/*.jpg

Es sortiert, verschiebt und benennt alle Ihre JPGs aus dem aktuellen Verzeichnis in eine nette Verzeichnisstruktur mit eindeutigen Dateinamen /Year/Month/Day/YearMonthDayHourMinute.jpg um

Es funktioniert nur mit * .jpg-Dateien, nicht mit RAWs


Hinweis: Es werden Dateien aus dem Pfad jhead -n%Y/%m/%d/%Y-%m-%d--%H%M-- *.jpg
entnommen

1

Es gibt jetzt eine Erweiterung namens Nautilus-Spalten , die EXIF-Daten sowie MP3 (ID3), PDF und weitere Metadaten hinzufügt. Diese neuen Spalten können auch als Sortierquelle verwendet werden.

Installieren mit:

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


1

Dies ist der Code, den ich verwende. Die Fotos werden umbenannt, indem YYYYMMDD_originalname.jpg hinzugefügt wird

#! /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

BEARBEITEN. Bei dieser Änderung wird das Datum im Tag an den Namen und auch an das Datumsattribut mit Berührung übergeben. Wenn diese Tags nicht vorhanden sind, wird das Änderungsdatum an den Namen der Datei übergeben.

#! /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

Zum Sortieren in Ordnern (Jahr und Monat) (JJJJMM):

exiftool "-Directory<DateTimeOriginal" -d "%Y%m" *
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.