다음과 같이 파일 이름에 타임스탬프가 포함된 사진 세트가 있습니다.
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
추가 설명:
Stephen의 대본의 일부를 편집하려고 시도하는 것은 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", 세미콜론 등을 이해하는 데 (적어도 나에게는) 도움이 되지 않는 것 같으며 검색이 거의 불가능합니다.
답변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
.