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..9
20자 혼합을 찾습니다 . 이를 위해 접미사 뒤에는 찾고 있는 숫자의 최소 한 자리가 옵니다 . 정규식은 기본 이름뿐만 아니라 전체 경로와 일치해야 하므로 디렉터리를 포함하는 최종 정규식은 입니다 ._
[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 등입니다. 동일한 순간에 사진을 촬영하더라도 원본 사진의 일련번호는 다릅니다.