이미지를 exif 시간으로 이름 바꾸기 : 고유 한 파일 이름 만들기


11

exiv를 통해 이미지를 exif 날짜 시간으로 바꾸면 다음을 수행합니다.

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

이제 사진이 정확히 동일한 타임 스탬프 (초 포함)를 가질 수 있습니다. 파일 이름을 자동으로 고유하게 만들려면 어떻게해야합니까?

동일한 디렉토리 구조에서 다시 실행하면 (아마도 새로운 그림을 추가 한 후) 이미 이름이 바뀐 그림은 변경되지 않아야하며 이미 존재하는 파일 이름이있는 그림이 추가되면 새로운 파일 이름이 고유해야한다는 의미에서 명령은 안정적이어야합니다 게다가.

첫 번째 시도는 결과 파일 이름에 원래 기본 이름을 그대로 두는 것이지만 명령은 위의 의미에서 안정적이지 않습니다.


1
타임 스탬프를 추출하고, 파일 이름을 작성하고, 기존 파일 이름을 확인하고, 존재하는 경우 파일을 수정 (접미사 또는 유사 항목 추가) mv하십시오.
Kusalananda

exiv2 명령에 옵션을 추가하여 더 직접적인 방법이 있습니까?
학생

따라서 exiftool을 사용한 대답은 다음과 같습니다 exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .. 귀하의 의견을 답변으로 바꾸실 수 있습니다.
학생

답변:


17

당신은 시도 할 수 있습니다 jhead않는 대신에 아웃 - 오브 - 박스 (와 a, b... z및 @meuh 언급 안정성 문제가없는 접미사가 같은 날짜에 27 개의 파일을 허용) :

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

또는 exiftool(man 페이지의 예)를 사용 하십시오.

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

(여기서 %-c시작하는 숫자 접미사 -)


3

내 버전의 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}_.... 간단히하기 위해 세트에서 20 문자의 혼합 0..9_regex 인 것을 찾습니다 [0-9_]{20}. 이것에 접미사 _뒤에 적어도 1 자리 숫자가 _[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' ...

1

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 *

0

pyrenamer는 새로 설치된 Ubuntu 16.04에서 작동하지 않으므로이 문제를 해결할 다른 방법을 찾아야합니다.

하나의 폴더에 IMG_0001.JPG, IMG_0002.JPG 등의 파일이 있습니다. 이 사이트를 확인하십시오, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash

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

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

출력 파일 이름은 YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG 등입니다. 같은 초에 사진을 찍은 경우에도 원본 사진 일련 번호가 달라집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.