이미지 이름을 EXIF ​​시간으로 변경: 고유한 파일 이름 만들기

이미지 이름을 EXIF ​​시간으로 변경: 고유한 파일 이름 만들기

exiv를 통해 이미지 이름을 EXIF ​​날짜/시간으로 바꾸는 경우 다음을 수행합니다.

find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;

이제 이미지의 타임스탬프가 정확히 동일할 수 있습니다(초 포함). 파일 이름을 자동으로 고유하게 만드는 방법은 무엇입니까?

이 명령은 동일한 디렉터리 구조에서 다시 실행하면(새 그림을 추가한 후) 이름이 변경된 그림이 변경되지 않아야 하고 기존 파일 이름으로 그림을 추가하면 새 파일 이름도 고유해야 하기 때문에 안정적이어야 합니다. .

나의 첫 번째 시도는 결과 파일 이름에 원래 기본 이름을 유지하는 것이었지만 위의 의미에서 해당 명령은 안정적이지 않습니다.

답변1

당신은 시도하고 싶을 수도 있습니다jhead대신, 기본적으로 작동하며( a, b... z접미사 사용, 동일한 날짜의 최대 27개 파일 허용) @meuh에서 언급한 안정성 문제가 없습니다.

find . -iname '*jpg' -exec jhead -n%Y_%m_%d__%H_%M_%S {} +

또는 다음을 사용하십시오 exiftool(맨 페이지의 예):

exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c.%%e .

(여기에 %-c;;로 시작하는 숫자 접미사가 있습니다. -파일이 이미 존재하는 경우 추가됩니다.)

(기여된 답변 및 의견에 따라 수정됨):

원래 파일 이름을 유지하려면 다음을 추가하십시오 _%%f.

 exiftool -ext jpg '-FileName<CreateDate' -d %Y_%m_%d__%H_%M_%S%%-c_%%f.%%e .

답변2

내 버전 exiv2(0.25 001900)은 파일 이름이 이미 존재할 때 수행할 작업을 대화식으로 묻습니다.

exiv2: File `./2013_06_19__14_03_13.jpg' exists. [O]verwrite, [r]ename or [s]kip? 

옵션을 추가하면 자동으로 이름에 -F추가 항목(또는 등)이 추가됩니다 ._1_2

Renaming file to ./2013_06_19__14_01_53_1.jpg, updating timestamp

명령을 두 번째로 실행하면 다음이 표시됩니다.

This file already has the correct name

아무 작업도 수행하지 않지만 해당 섹션이 있으면 _1혼란스러워서 이름이 변경됩니다 _2. 비파괴적인 방식으로 실행될 때마다 이와 같이 전환됩니다. 원하는 경우 이 옵션을 무시하거나 find특정 부분 날짜 패턴과 일치하는 파일을 무시하도록 패턴을 변경할 수 있습니다 _.

예를 들어 날짜 형식은 정규식 패턴으로 시작됩니다 [0-9]{4}_[0-9]{2}_.... 단순화하기 위해 set sum , regex 에서 0..920자 혼합을 찾습니다 . 이를 위해 접미사 뒤에는 찾고 있는 숫자의 최소 한 자리가 옵니다 . 정규식은 기본 이름뿐만 아니라 전체 경로와 일치해야 하므로 디렉터리를 포함하는 최종 정규식은 입니다 ._[0-9_]{20}__[0-9]{1,}.jpg.*/[0-9_]{20}_[0-9]{1,}.jpg

따라서 다음과 같은 조회를 사용할 수 있습니다.

find . -regextype posix-extended ! -iregex '.*/[0-9_]{20}_[0-9]{1,}.jpg' -iname '*.jpg' ...

답변3

Exiv2는 이 문제를 자체적으로 처리할 수 있습니다. 나 또한 exiv2 매뉴얼을 보기 전까지 이 부분에 대한 도움을 찾는데 많은 시간을 보냈다. -F 옵션은 이 문제를 해결합니다.

exiv2 -r'%Y_%m_%d__%H_%M_%S' -F *.jpg

파일이 이미 존재하는 경우 끝에 _N이 추가됩니다.

폴더 생성을 허용하는 옵션을 찾는 사람들을 위한 것입니다.

exiftool -r '-FileName<DateTimeOriginal' -d %Y/%m/%d/%%f%%-c.%%e *

답변4

Pyrenamer는 Ubuntu 16.04를 새로 설치한 경우 작동하지 않으므로 이 문제를 해결하려면 다른 방법도 찾아야 합니다.

내 폴더 중 하나에 IMG_0001.JPG, IMG_0002.JPG와 같은 파일이 있습니다. 이 웹사이트를 확인하세요. https://stackoverflow.com/questions/917260/can-var-parameter-expansion-expressions-be-nested-in-bash

먼저 "exiv2"를 설치하기 위해 다음 명령줄을 작성했습니다.

$(ls *.[Jj][Pp][Gg] 2> /dev/null)의 img의 경우 exiv2 -r'%Y%m%d_%H%M%S_'"$(tmp=$ { img%%.*};echo ${tmp##*_})" "$img" 이름 바꾸기; 완료

출력 파일 이름은 YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG 등입니다. 동일한 순간에 사진을 촬영하더라도 원본 사진의 일련번호는 다릅니다.

관련 정보