0 votos

Cambiar la fecha y hora del archivo (imágenes, vídeos) a partir del nombre del archivo

Al mover archivos de un directorio a otro y de un PC a otro, la fecha de la última modificación suele restablecerse a la misma fecha de la operación de mover o copiar. Esto hace que los archivos no estén ordenados cronológicamente en algunas aplicaciones (Galería), lo que resulta bastante molesto, especialmente para imágenes y vídeos.

Normalmente, este tipo de archivos sigue la convención de nomenclatura IMG_YYYMMDD_HHMMSS.jpg para las imágenes y VID_YYYMMDD_HHMMSS.mp4 para los vídeos. Así que pensé en combinar touch y la extracción de caracteres de los nombres de archivo, ya que la marca de tiempo forma parte del propio nombre del archivo.

Encontré este script en Cuartel general de Ephestione for i in IMG*.jpg; do busybox touch -t ${i:4:8}${i:13:4}.${i:17:2} $i; done pero sólo funciona en terminal. Intenté hacer un script pero no funciona (ver abajo)

#!/system/bin/sh
#change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg 
for i in IMG_*.jpg
do
    touch -t ${i:4:8}${i:13:4}.${i:17:2} $i
done

#change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg
for i in IMG-*WA*.jpg
do
    touch -t ${i:4:8}1234 $i
done

#change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4
for i in VID_*.jpg
do
    touch -t ${i:4:8}${i:13:4}.${i:17:2} $i
done

#change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4
for i in VID-*WA*.mp4
do
    touch -t ${i:4:8}1234 $i
done

Idealmente me gustaría poner un script como este en el directorio DCIM o Pictures de nivel superior y que procese todas las Imágenes y Videos en los subdirectorios. Por supuesto estoy rooteado.

1voto

Reddy Lutonadio Puntos 46

Elimine del script el .${i:17:2} en bucle for.

Debería serlo:

#!/system/bin/sh
#change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg 
for i in IMG_*.jpg
do
    touch -t ${i:4:8}${i:13:4} $i
done

#change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg
for i in IMG-*WA*.jpg
do
    touch -t ${i:4:8}1234 $i
done

#change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4
for i in VID_*.jpg
do
    touch -t ${i:4:8}${i:13:4} $i
done

#change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4
for i in VID-*WA*.mp4
do
    touch -t ${i:4:8}1234 $i
done

Observa que las imágenes y vídeos de WhatsApp según tu script tienen la misma hora 12:34.

Editar: Para ir también a través de subdirectorios, cambiar los bucles for de la siguiente manera:

for i in `find . -type f -name "IMG_*..jpg"`
do

j=`basename $i` 

echo $j

touch -t ${j:4:8}${j:13:4} $i

done

Explicación:

encontrar . -tipo f -nombre " .mp5"`: buscar ficheros ( -type t) cuyos nombres contengan " IMG_ .jpg" ( -nombre "IMG_*.jpg") en el directorio actual ( . ) y subdirectorios.

j= basename $i : Obtiene el nombre del archivo (no la ruta completa), y lo asigna a j.

touch -t ${j:4:8}${j:13:4} $i : Cambia la hora de modificación del archivo basándose en la fecha y hora recuperadas de ${j:4:8}${j:13:4} .

0 votos

Sí, 1234 es un timestamp ficticio. Script parece funcionar incluso si stderrs algún toque: fecha no válida

0 votos

¿Y si funciona con subdirectorios tru?

0 votos

Voy a modificar la secuencia de comandos cuando tengo tiempo para ir a través de subdirectorios también

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X