EXIF画像データで画像を整理/並べ替える方法


9

失われたパーティションからイメージを回復しました。各イメージのEXIFデータの作成日でそれらをソートするか、フォルダーに配置する必要があります。

digiKamとShotwellをインストールしましたが、どのオプションでもこれを行う方法が見つかりませんでした。

それらのプログラムまたは他の方法でそれを行う方法を誰かに私に説明できますか?

回答:


14

私のお気に入りの解決策は、ファイルの日付をexif写真の日付と同じに設定することです。これにより、任意のファイルエクスプローラーツールを使用してファイルを並べ替えることができます。

  1. jheadをインストール(apt-get install jhead
  2. 写真ディレクトリに移動し、このコマンドを実行しjhead -ft *ます。これは、exifメタデータの作成日でファイルシステムのファイル日付を設定します
  3. 次に、トップメニューに移動し(Ubuntuでは、ほとんどの場合、モニター画面の上からマウスで移動します)、[表示]→[画像の並べ替え]→[日付順]を選択します。

画像を日付順に並べ替えると、ファイルが作成または変更された日付順に並べ替えられます。多くのファイルを復元しただけの場合、それらすべての日付が同じになります。私の理解では、EXIFメタデータはファイル内にあり、必ずしもファイル自体の日付と一致しません
Mauricio Gracia Gutierrez '11

7

exiftoolの使用をお勧めします。あなたはそれをインストールすることができます

sudo apt install exiftool

YYYYMMDD形式の作成日に基づいてファイルの名前を変更し、最後にシーケンス番号を追加するサンプルコマンドを次に示します。

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

image.jpg次に、作成日を名前として「YYYY-MM-DD」形式でディレクトリに移動するサンプルコマンドを示します。

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

ドキュメントには他にもサンプルコマンドがあります:https : //sno.phy.queensu.ca/~phil/exiftool/filename.html


Scottは、このコマンドが画像が配置されているフォルダで実行しますか?UbuntuでNTFSマウントされたパーティションでこれを実行できますか?
マウリシオグラシアグティエレス2014年

2
警告の必須の言葉-これらの写真の唯一のコピーでこれを試さないでください-失敗した場合、最初からやり直すことができるように、最初にバックアップコピーを作成します。そうは言っても、あなたの質問に関して:はい、そうです。たとえば、作業コピーが/ home / me / Pictures / stagingに保存されている場合は、cd /home/me/Pictures/staging最初に実行してから、exiftoolを呼び出します。
スコット

同じコマンドラインがMS Windowsでも機能しますか?
マウリシオグラシアグティエレス2014年

著者のWebサイトで説明を読んだことに基づいて、私はそう信じています:「ExifToolは、プラットフォームに依存しないPerlライブラリに加えて、さまざまなファイルのメタ情報を読み取り、書き込み、編集するためのコマンドラインアプリケーションです。」Windowsのコマンドプロンプトから呼び出す前に特別なことをする必要があるかもしれませんが(「Windows実行可能ファイル」の下に表示されています)、すべてのコマンドとパラメーターがすべてのプラットフォームで同じになることを期待しています。その時点に到達します。
スコット

1

優れたツールは、Rapid Photo Downloaderです。

  1. PPAの追加

    sudo apt-add-repository ppa:dlynch3/ppa
    
  2. 更新とインストール

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

「失われたパーティション」を入力ソースとして使用し、Rapid Photo Downloaderのexifデータに基づいてターゲットパス/ファイル名を設定します


PPAは更新されなくなりました。追加しようとし、次のメッセージを受け取りました:このPPAは現在古くなっています。Rapid Photo Downloaderの最新バージョンについては、damonlynch.net / rapid / download.html
Corey S.

1

Phatch Photoバッチプロセッサをインストールします。定義済みのアクションから、ファイルの名前をexifの日付に変更するアクションを選択します。


1

最も簡単な使用: jhead -n%Y/%m/%d/%Y%m%d%H%M /Destination/*.jpg

すべてのJPGを現在のディレクトリから、一意のファイル名/Year/Month/Day/YearMonthDayHourMinute.jpgを持つ素敵なディレクトリ構造にソート、移動、名前変更します

* .jpgファイルの生地でのみ機能し、RAWでは機能しません


注:それは、コマンドラインの最後に指定されているパスからファイルを取る jhead -n%Y/%m/%d/%Y-%m-%d--%H%M-- *.jpg
Vedavrat

1

nautilus-columnsと呼ばれる拡張機能が追加され、MP3(ID3)、PDFなどのメタデータだけでなくEXIFデータも追加されます。これらの新しい列は、並べ替えのソースとしても使用できます。

インストール:

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


1

これは私が使用しているコードです。YYYYMMDD_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

編集。この変更では、タグ内の日付が名前と日付属性にタッチで渡されます。また、これらのタグが存在しない場合は、変更タグの日付がファイルの名前に渡されます。

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

フォルダの並べ替え(年と月)(YYYYMM)の場合:

exiftool "-Directory<DateTimeOriginal" -d "%Y%m" *
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.