5 votos

Lote el nombre del archivo y cambie la fecha de creación del contenido

Tengo muchas fotos / videos llamados: 2012-04-05 19.21.34.jpg

Sin embargo, la fecha de creación ha cambiado completamente.

¿Hay alguna forma de reemplazar la fecha de creación con la información del nombre del archivo?

5voto

user3439894 Puntos 5883

Si la convención de nomenclatura es la misma para todos los archivos en el mismo directorio, a continuación, en la Terminal, cd a directory y use el siguiente comando compuesto:

for f in *.*; do touch -t $(sed -e 's:\.[a-z].*::' -e 's:\.::' -e 's:[- ]::g'<<<"$f") "$f"; done

Explicación de algunos de los compuestos de comandos:

  • for f in *.*; do ...; done - Bucle a través de los archivos.
  • touch -t [[CC]YY]MMDDhhmm[.SS] - Cambiar el acceso y modificación de los tiempos a la hora especificada en lugar de la hora actual del día.
  • $(...) - La sustitución de comandos, reemplaza el comando(s) con el resultado, literalmente.
  • sed - Editor de flujo para el filtrado y transformación de texto.
    • −e script - Agregar la secuencia de comandos para la ejecución de comandos.
    • 's:\.[a-z].*::' - Este tiras de la extensión del archivo, por ejemplo: 2012-04-05 19.21.34.jpg
      • Devuelve: 2012-04-05 19.21.34
    • 's:\.::' - Esto elimina la primera . en, por ejemplo,: 2012-04-05 19.21.34
      • Devuelve: 2012-04-05 1921.34
    • 's:[- ]::g' - Esto elimina - y el espacio , por ejemplo,: 2012-04-05 1921.34
      • Devuelve: 201204051921.34

Cual es el formato perfecto para la -t opción en la touch comando.


Por favor, tenga en cuenta que el original comando compuesto se forma un poco floja. En otras palabras, puede ser escrito de forma expresa de destino .jpg ficheros donde la extensión es menor caso, como en tu ejemplo, por ejemplo,: 2012-04-05 19.21.34.jpg

  • Sustitución de la *.* en for f in *.*; do ...; done con: in *.jpg
  • Sustitución de la [a-z].* en sed -e 's:\.[a-z].*::' con: jpg
for f in *.jpg; do touch -t $(sed -e 's:\.jpg::' -e 's:\.::' -e 's:[- ]::g'<<<"$f") "$f"; done

Desde la -t opción se utiliza con la touch comando, cualquier nombre de archivo que no produce el resultado esperado, el escenario del peor caso con ella escrito un poco flojo es que no va a impactar en la no-archivos de destino y simplemente el error en los archivos con:

touch: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]

Así, escrito un poco floja o de manera más específica, el resultado final será el mismo y, sólo los archivos con la convención de nomenclatura por ejemplo 2012-04-05 19.21.34.jpg será tocado.


NOTA: Siempre asegúrese de tener una copia de seguridad actual antes de mayoristas de procesamiento de archivos.

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