Si cambio el nombre de las imágenes vía exiv a la fecha y hora exif, hago lo siguiente:
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
Ahora puede suceder que las imágenes tengan exactamente la misma marca de tiempo (incluidos los segundos). ¿Cómo puedo hacer que el nombre de archivo sea único automáticamente?
El comando debe ser estable en el sentido de que si lo ejecuto en la misma estructura de directorio nuevamente (tal vez después de agregar nuevas imágenes), las imágenes ya renombradas no deberían cambiar y si se agregan imágenes con nombres de archivo existentes, los nuevos nombres de archivo deberían ser únicos también.
Mi primer intento fue dejar el nombre base original en el nombre de archivo resultante, pero luego el comando no sería estable en el sentido anterior.
command-line
exif
estudiante
fuente
fuente
mv
el archivo.exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .
. Tal vez podrías convertir tu comentario en una respuesta.Respuestas:
Es posible que desee probar en su
jhead
lugar qué es lo que viene listo para usar (cona
,b
...z
sufijos que permiten hasta 27 archivos con la misma fecha) y no tiene el problema de estabilidad mencionado por @meuh:O usando
exiftool
(ejemplo en la página man):(aquí con
%-c
ser un sufijo numérico que comienza con-
)fuente
Mi versión de
exiv2
(0.25 001900) preguntará interactivamente qué hacer cuando el nombre de archivo ya existe.Al agregar la opción
-F
, agregará automáticamente un nombre adicional_1
(o_2
etc.) al nombre.Si el comando se ejecuta por segunda vez, dice:
y no hace nada, pero se confunde si existe la
_1
parte, y cambiará su nombre_2
. Se alternará de esta manera de forma no destructiva en cada carrera. Puede ignorar esto si lo desea, o cambiar sufind
patrón para ignorar los archivos que coinciden con el patrón de fecha con una_
parte.Por ejemplo, comienza el patrón de expresiones regulares para el formato de fecha
[0-9]{4}_[0-9]{2}_...
. Para simplificar, solo buscaré una combinación de 20 caracteres del conjunto0..9
y_
, que es regex[0-9_]{20}
. Para esto, el sufijo de_
seguido por al menos 1 dígito para buscar es_[0-9]{1,}.jpg
. Como la expresión regular tiene que coincidir con la ruta completa, y no solo con el nombre base, la expresión regular final, incluido el directorio, es.*/[0-9_]{20}_[0-9]{1,}.jpg
.Entonces puedes usar un hallazgo como:
fuente
Exiv2 puede manejarlo solo. También pasé mucho tiempo buscando ayuda en esto, hasta que fui a ver el manual exiv2. La opción -F resuelve este problema.
Agregará un _N al final si el archivo ya existe.
Y para aquellos que buscan una opción que permita crear una carpeta.
fuente
Pyrenamer no funcionará en mi nuevo Ubuntu 16.04 instalado, por lo tanto, tengo que encontrar otra forma de resolver este problema también.
Tengo archivos como IMG_0001.JPG, IMG_0002.JPG, ... en una carpeta. Consulte este sitio, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
Instale el "exiv2" primero, y escribí la siguiente línea de comando:
para img en $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); do exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})" renombrar "$ img"; hecho
Los nombres de los archivos de salida son AAAAMMDD_HHMMSS_0001.JPG, AAAAMMDD_HHMMSS_0002.JPG, ... etc. Incluso las fotos fueron tomadas en el mismo segundo, el número de serie original de la foto hará la diferencia.
fuente