Esta es la respuesta más correcta que te podemos dar, pero mírala pausadamente y analiza si se puede adaptar a tu trabajo.
Solución:
Nombramiento basado en la fecha del sistema de archivos
En el shell de Linux:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
Explicación:
-
for f in *.jpg
doEsto inicia el ciclo sobre todos los archivos jpeg. Una característica de esto es que funcionará con todos los nombres de archivo, incluso con espacios, tabulaciones u otros caracteres difíciles en los nombres.
-
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
Esto cambia el nombre del archivo. utiliza el
-r
opción que dicedate
para mostrar la fecha del archivo en lugar de la fecha actual. La especificación+"%Y%m%d_%H%M%S"
dicedate
para formatearlo como usted especificó.El nombre del archivo,
$f
, se coloca entre comillas dobles siempre que se utilice. Esto asegura que los nombres de archivo impares no causen errores.los
-n
opción amv
le dice a move que nunca sobrescriba un archivo existente. -
done
Esto completa el bucle.
Para uso interactivo, puede preferir que el comando esté todo en una línea. En ese caso, utilice:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
Denominación basada en la fecha de creación EXIF
Para nombrar el archivo según la Fecha de creación EXIF (en lugar de la fecha del sistema de archivos), necesitamos exiftool
o equivalente:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk 'print $4".jpg"')"
done
Explicación:
Lo anterior es bastante similar a los comandos para la fecha del archivo pero con el uso de exiftool
y awk
para extraer la fecha de creación de la imagen EXIF.
-
los
exiftool
El comando proporciona la fecha en un formato como:$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338
La fecha real que queremos es el cuarto campo en la salida.
-
pasamos el
exiftool
salida aawk
para que extraiga el campo que queramos:awk 'print $4".jpg"'
Esto selecciona el campo de fecha y también agrega en el
.jpg
extensión.
¡Gracias a @John1024!
Necesitaba renombrar archivos con diferentes extensiones al mismo tiempo, según la última fecha de modificación:
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
“DSC_0189.JPG” ➜ “2016-02-21_18-22-15_DSC_0189.JPG”
“MOV_0131.avi” ➜ “2016-01-01_20-30-31_MOV_0131.avi”
Si no desea mantener el nombre de archivo original:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
¡Espero que ayude a los novatos como yo!
Recuerda algo, que tienes la capacidad de añadir una evaluación certera si diste con el arreglo.