EXIF 이미지 데이터별로 이미지를 구성 / 정렬하는 방법


9

손실 된 파티션에서 이미지를 복구했으며 각 이미지의 EXIF ​​데이터에서 생성 날짜별로 정렬하거나 폴더에 저장해야합니다.

digiKam과 shotwell을 설치했지만 옵션 에서이 작업을 수행하는 방법을 찾지 못했습니다.

누구든지 그 프로그램 중 하나 또는 다른 방법으로 어떻게하는지 설명 할 수 있습니까?

답변:


14

내가 가장 좋아하는 해결책은 파일 날짜를 exif 사진 날짜와 동일하게 설정하는 것입니다. 이렇게하면 파일 탐색기 도구를 사용하여 파일을 정렬 할 수 있습니다.

  1. jhead 설치 ( apt-get install jhead)
  2. photos 디렉토리로 이동하여이 명령을 실행하십시오 jhead -ft *. 파일 시스템에 파일 날짜를 설정하여 exif 메타 데이터의 작성 날짜를 설정합니다.
  3. 이제 상단 메뉴로 이동하십시오 (우분투에서는 모니터 화면 상단을 마우스로 가장 많이 사용합니다).보기 → 이미지 정렬 → 날짜순을 선택하십시오.

날짜별로 이미지 정렬은 파일을 생성 또는 수정 한 날짜별로 정렬합니다. 방금 많은 파일을 복구 한 경우 모든 파일의 날짜가 동일합니다. 내가 EXIF 메타 데이터를 이해하는 파일 안에 반드시 파일 자체의 날짜와 일치하지 않습니다
마우 그라시아 구티에레즈

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 이미지가있는 폴더에서이 명령을 실행합니까? 우분투의 NTFS 마운트 파티션에서 이것을 실행할 수 있습니까?
Mauricio Gracia Gutierrez

2
필수 경고 단어-이 사진의 유일한 사본에서 이것을 시도하지 마십시오-먼저 백업 사본을 만들어서 사본을 만들면 다시 시작할 수 있습니다. 당신의 질문에 관해서는 그렇습니다. 그렇습니다. 예를 들어, 작업 사본 이 / home / me / Pictures / staging에 저장된 경우 cd /home/me/Pictures/staging먼저 수행 한 다음 exiftool을 호출하십시오.
Scott

MS Windows에서도 동일한 명령 줄이 작동합니까?
Mauricio Gracia Gutierrez

필자는 저자의 웹 사이트에서 설명을 읽음으로써 "ExifTool은 플랫폼 독립적 인 Perl 라이브러리와 다양한 파일에서 메타 정보를 읽고 쓰고 편집 할 수있는 명령 줄 응용 프로그램"이라고 생각합니다. Windows의 명령 프롬프트에서 호출하기 전에 특별한 조치를 취해야 할 수도 있지만 ( "Windows Executable"위치 참조) 모든 명령과 매개 변수가 한 번만 있으면 모든 플랫폼에서 동일하게 예상됩니다 그 시점에 도달하십시오.
Scott

1

훌륭한 도구는 빠른 사진 다운로더입니다

  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로 멋진 디렉토리 구조로 정렬, 이동 및 이름 변경합니다.

RAW가 아닌 * .jpg 파일 반죽에서만 작동합니다.


참고 : 경로에서 파일을 가져옵니다. 명령 줄의 끝 부분에 지정되어 있습니다 . jhead -n%Y/%m/%d/%Y-%m-%d--%H%M-- *.jpg
Vedavrat

1

MP3 (ID3), PDF 및 더 많은 메타 데이터뿐만 아니라 EXIF ​​데이터를 추가하는 nautilus-columns 라는 확장이 있습니다 . 이 새로운 열은 정렬 소스로도 사용할 수 있습니다.

다음을 사용하여 설치 :

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.