다음과 같이 파일 이름에 타임스탬프가 포함된 사진 세트가 있습니다.
Photo on 3-09-12 at 9.24 PM #2.jpg
Photo on 3-09-12 at 9.24 PM #1.jpg
Photo on 3-09-12 at 8.23 PM.jpg
등.
("3-09-12"는 "2012년 9월 3일" 또는 DD-MM-YY를 의미합니다)
하지만 이 사진에는 EXIF 데이터가 전혀 없습니다. 더 큰 컬렉션으로 가져오기 전에 이 정보를 어떻게 exiftool
사진의 파일 이름에서 EXIF 데이터로 새 타임스탬프에 추가하도록 파이프하고 지시할 수 있습니까?
업데이트: (현재 1부) DD-MM-YY 및 12시간 시간으로 파일 이름을 구문 분석하는 것에 대한 내 질문에 @Stephane이 매우 친절하게 답변했습니다. 그러나 동일한 사진 모음에 내가 놓친 한 가지 변형이 있는 파일 이름이 포함되어 있다는 것을 발견했습니다. 'Pt.'를 추가하는 것이 더 의미가 있기를 바랍니다. 2' 완전히 새로운 질문을 시작하는 대신.
요컨대:
@Stephane의 훌륭한 답변을 어떻게 바꿀 수 있습니까?
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*?at.*?[AP]M)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*[PA]M*.jpg
-- YYYY-MM-DD 및 24시간제를 사용한다는 점에서 질문의 첫 번째 부분과 약간 다른 아래 파일 이름 형식으로 작동할 수 있습니다.
Photo on 2010-09-15 at 18.44 #4.jpg
Photo on 2010-09-15 at 18.44 #3.jpg
Photo on 2010-09-15 at 18.44.jpg
추가 설명:
Stephane의 스크립트 일부 를 편집하려고 하면 Date::Manip
스크립트의 가장 중요한 부분에서 무슨 일이 일어나고 있는지에 대한 나의 무지가 드러나는 것 같습니다.
Date_Init
ISO와 같은 전체 연도 날짜 형식으로 돌아가서 다음 줄을 생략하려고 했습니다 .
/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg
하지만 exiftool
나에게 no writeable tags
과 FileName not defined
. 지침:http://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.pod해당 마침표에 무슨 일이 일어나고 있는지 이해하는 데 (적어도 나에게는) 도움이 되지 않는 것 같습니다. 줄 시작 부분의 'y', 세미콜론 등은 Google 검색이 불가능합니다.
답변1
노력하다:
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*.jpg
(모듈을 설치해야 할 수도 있습니다 Date::Manip
perl
).
-Tag<value
해당 태그를 설정합니다 . 는 에서 처리된 후 ${tag;perl-code}
의 값으로 확장하는 데 사용할 수 있습니다 .tag
perl-code
Date::Manip
여기서는 의 기능을 사용하여 파일 이름의 날짜를 구문 분석하고 태그( ) UnixDate
에 허용되는 형식으로 변환할 계획입니다 .CreateDate
2011-04-15 21:38:00
Date::Manip
많은 일반적인 날짜 형식을 이해합니다. 예를 들어, 3-09-12 at 9:24 PM
일이나 월이 먼저 나오는 미국식인지 비미국식인지 알려주어야 하지만) 및 2010-09-15 at 18.44
( :
대신에 를 참고하세요 .
)를 이해합니다.
그래서 우리가 하는 일은 파일 이름에서 해당 부분을 추출하고 를 .
로 변환 :
한 다음 에 전달하는 것입니다 UnixDate
.