Há um conjunto de fotos com carimbos de data e hora em seus nomes de arquivos como estes:
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
etc.
("3-09-12", significa "3 de setembro de 2012" ou DD-MM-AA)
Mas essas fotos não possuem nenhum dado EXIF. Antes de importá-los para uma coleção maior, como você canalizaria essas informações exiftool
e também solicitaria que adicionasse novos carimbos de data e hora como dados EXIF, todos a partir dos nomes dos arquivos das fotos?
Atualizar: (A agora parte 1 de) minha pergunta sobre a análise de nomes de arquivos com DD-MM-AA e 12 horas foi gentilmente respondida por @Stephane. Mas descobri que o mesmo lote de fotos contém nomes de arquivos com uma variação que esqueci. Espero que faça mais sentido adicionar um 'Pt. 2' em vez de iniciar uma questão totalmente nova.
Resumidamente:
Como eu poderia mudar a resposta brilhante de @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
- para que funcione com o formato de nome de arquivo abaixo, que é um pouco diferente da primeira parte da pergunta, pois usa AAAA-MM-DD e horário de 24 horas:
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
Mais explicação:
Tentar editar a Date::Manip
parte do roteiro de Stephane parece mostrar minha ignorância sobre o que está acontecendo nas partes mais importantes dele.
Tentei omitir a Date_Init
linha, já que voltamos ao formato de data de ano inteiro no estilo ISO e depois tivemos
/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg
Mas exiftool
está me dando no writeable tags
e FileName not defined
. Instruções emhttp://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podnão parecem ser úteis (pelo menos para mim) para entender o que está acontecendo com esses pontos, aquele 'y' no início da linha, ponto e vírgula etc., e eles são bastante impossíveis de serem pesquisados no Google: S
Responder1
Tentar:
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
(talvez seja necessário instalar o Date::Manip
perl
módulo).
O -Tag<value
define a tag correspondente. O ${tag;perl-code}
pode ser usado para expandir para o valor de tag
depois de ter sido processado pelo perl-code
.
Aqui, o plano é usar a função Date::Manip
de UnixDate
para analisar a data no nome do arquivo e convertê-la para um formato aceitável para a CreateDate
tag ( 2011-04-15 21:38:00
).
Date::Manip
entende muitos formatos de data comuns. Por exemplo, ele entende 3-09-12 at 9:24 PM
(embora você precise dizer se é a convenção dos EUA ou de fora dos EUA, onde o dia ou mês é o primeiro) e 2010-09-15 at 18.44
(observe o :
em vez de .
).
Então o que fazemos é extrair essa parte do nome do arquivo, converter .
para :
e passá-la para UnixDate
.