lea la fecha de creación del nombre del archivo y cambie - batch

1

Tengo archivos con el nombre "clip-2014-01-31 18; 50; 15.mp4", es decir, "clip-YYYY-MM-DD hh; mm; ss.mp4".

¿Cómo puedo configurar la fecha y hora de creación de acuerdo con la forma en que se especifica en el nombre del archivo para todos los 2000 archivos que tengo en una carpeta? Sé que el comando touch -t cambia la fecha de creación, pero no sé cómo extraer la información de fecha / hora del nombre de archivo y poner esto en un comando, por lo que esto se hace automáticamente para todos los archivos.

    
pregunta mcanwo 19.08.2014 - 22:49

1 respuesta

3

Tienes suerte porque los números en los nombres de tus archivos solo están en el orden que touch -t necesita.

Este comando en el terminal funcionará. Solo debe asegurarse de que su directorio de trabajo esté configurado en la carpeta que desea hacer:

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

Para descomponerlo:

for f in * establece la variable f al nombre de cada archivo en el directorio, a su vez.

do pone todo hasta que done en el bucle for .

t=$(…) establece la variable t a la salida de los comandos entre paréntesis.

El primer comando sed coincide con cualquier letra antes de un símbolo - , los símbolos - ; y space y la extensión del archivo, y los elimina.

El segundo comando sed inserta un período entre los valores mm y ss, según lo requiera la función táctil.

touch -t $t $f cambia la modificación del archivo y los tiempos de creación al valor de t en el archivo f .

Probado en algunos archivos ficticios con cualquier versión de sed incluida con Mavericks.

    
respondido por el Michael D. M. Dryden 20.08.2014 - 01:41

Lea otras preguntas en las etiquetas