4 votos

Las fechas de creación de los cambios por lotes se basan en nombres de archivo

Tengo los archivos que se denominan como "12. 2017-04-11 063118.jpg" y "123. 2016-09-05 115236.jpg". El número a la izquierda de el "." cuenta como un índice de 1 a 1400.

¿Cómo puedo establecer la fecha y hora de creación de acuerdo a la forma en que se especifica en el nombre de archivo para todos los 1400 archivos que tengo en la carpeta. Sé el comando touch -t cambia la fecha de creación, pero no sé cómo extraer la información de fecha y hora desde el nombre de archivo y poner esto en orden, de modo que este se realiza de forma automática para todos los archivos.

Yo sé de otro hilo que por debajo de la que debe trabajar. pero no sé cómo modificar el texto de conversión a aplicar correctamente a mis convención de nomenclatura de archivos.

for f in *; do
    t=$(echo $f | sed -E 's/([A-z]*-)|([ ,;])|(\..*)//g' | sed -E 's/(.*)(..)/\1.\2/')
    touch -t $t "$f"
done

El código anterior funciona si mi convención de nomenclatura de archivos es como "clip-2014-01-31 18;50;15.mp4", sin embargo, tengo un formato diferente: "12. 2017-04-11 063118.jpg" y "123. 2016-09-05 115236.jpg". ¿Alguien sabe cómo ajustar el sed función de comando para el proceso de la conversión en el formato correcto para tocar?

3voto

user3439894 Puntos 5883

Ya se preguntó cómo se podría modificar lo que ya había, que le cambiará la captura de los grupos de la primera aparición de sed para que coincida con el patrón, dejando el segundo sed como es. También la doble cita de la $f en echo "$f" |.

Nota sin embargo, he eliminado el uso de la tubería y la segunda aparición de sed, | sed ..., por el uso de la -e opción, que agrega los comandos de edición en una lista de comandos.

for f in *; do
    t=$(echo "$f" | sed -E -e 's/(.*\. )|([-])|([ ])|(\..*)//g' -e 's/(.*)(..)/\1.\2/')
    touch -t $t "$f"
done

Aquí está ajustado como un one-liner:

for f in *; do t=$(echo "$f" | sed -E -e 's/(.*\. )|([-])|([ ])|(\..*)//g' -e 's/(.*)(..)/\1.\2/'); touch -t $t "$f"; done

He aquí una explicación de la captura de grupos en la primera sed comando de edición:

enter image description here

Lo que te deja con 20160905115236 y al ser procesada por el segundo sed comando de edición, se convierte en 201609051152.36 como (.*)(..) rompe hacia abajo para captura dos grupos, el segundo contiene los dos últimos caracteres y la primera con todo lo demás. El . se coloca en la sustitución de parte de espalda-se hace referencia /\1.\2/ tanto de captura de los grupos.

0voto

WGroleau Puntos 255

Si los archivos contienen etiquetas de salida, el 'exiftool' libre puede cambiar el nombre del archivo de acuerdo a los valores dentro del archivo. La instalación también instala una página de manual detallada.

Http://www.sno.phy.queensu.ca/~phil/exiftool/

He utilizado esta herramienta no sólo para cambiar nombres de archivo, sino para escribir fragmentos de HTML para mostrar los archivos en una página web.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple 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