Hay un conjunto de fotografías con marcas de tiempo en sus nombres de archivo como estas:
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 septiembre de 2012" o DD-MM-AA)
Pero estas fotos no tienen ningún dato EXIF. Antes de importarlas a una colección más grande, ¿cómo canalizaría esta información exiftool
y también le diría que agregue nuevas marcas de tiempo como datos EXIF, todo desde los nombres de archivo de las fotos?
Actualizar: (La ahora parte 1 de) mi pregunta sobre el análisis de nombres de archivos con DD-MM-AA y 12 horas ha sido respondida muy amablemente por @Stephane. Pero descubrí que el mismo lote de fotos contiene nombres de archivos con una variación que me había pasado por alto. Espero que tenga más sentido agregar un 'Pt. 2' en lugar de comenzar una pregunta completamente nueva.
En breve:
¿Cómo podría cambiar la brillante respuesta 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 con el formato de nombre de archivo siguiente, que es ligeramente diferente de la primera parte de la pregunta, ya que utiliza AAAA-MM-DD y hora 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
Más explicación:
Intentar editar la Date::Manip
parte del guión de Stéphane parece mostrar mi ignorancia de lo que sucede en las partes más importantes.
Intenté omitir la Date_Init
línea ya que volvemos a un formato de fecha de año completo estilo ISO y luego tenemos
/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg
Pero exiftool
me está dando no writeable tags
y FileName not defined
. Instrucciones enhttp://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podno parecen ser útiles (al menos para mí) para comprender qué sucede con esos puntos, esa 'y' al comienzo de la línea, punto y coma, etc., y son bastante imposibles de buscar en Google :S
Respuesta1
Intentar:
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
(Es posible que tengas que instalar el Date::Manip
perl
módulo).
Establece -Tag<value
la etiqueta correspondiente. Se ${tag;perl-code}
puede utilizar para expandir al valor de tag
después de que haya sido procesado por perl-code
.
Aquí, el plan es utilizar Date::Manip
la UnixDate
función para analizar la fecha en el nombre del archivo y convertirla a un formato aceptable para la CreateDate
etiqueta ( 2011-04-15 21:38:00
).
Date::Manip
entiende muchos formatos de fecha comunes. Por ejemplo, entiende 3-09-12 at 9:24 PM
(aunque debe indicar si se trata de la convención de EE. UU. o de fuera de EE. UU. donde el día o el mes es el primero) y 2010-09-15 at 18.44
(tenga en cuenta en :
lugar de .
).
Entonces, lo que hacemos es extraer esa parte del nombre del archivo, convertirlo .
a :
y pasarlo a UnixDate
.