¡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 conservar el nombre de archivo original:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
¡Espero que ayude a los novatos como yo!
Denominación basada 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 do
Esto 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 le dice adate
para mostrar la fecha del archivo en lugar de la fecha actual. La especificación+"%Y%m%d_%H%M%S"
le dice adate
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.El
-n
opción amv
le dice a move que nunca sobrescriba un archivo existente. -
done
Esto completa el ciclo.
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 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.
-
El
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 el
.jpg
extensión.
Prueba esto
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
Aunque podría haber una manera más fácil.