GNU/Linux >> Tutoriales Linux >  >> Linux

linux-shell:cambiar el nombre de los archivos al tiempo de creación

¡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 a date para mostrar la fecha del archivo en lugar de la fecha actual. La especificación +"%Y%m%d_%H%M%S" le dice a date 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 a mv 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 a awk 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.


Linux
  1. Cómo encontrar y ordenar archivos según la fecha y hora de modificación en Linux

  2. Cambiar la fecha de creación del archivo

  3. Comando para obtener el tiempo en milisegundos

  4. Encuentra archivos creados entre un rango de fechas

  5. Linux cambia el nombre de los archivos a mayúsculas

Crear directorios o archivos nombrados con fecha/hora/mes/año actual

Cómo configurar la fecha, la hora y la zona horaria en RHEL 8

11 ejemplos útiles de comandos de fecha de Linux

Cómo configurar la fecha y la hora en Linux

¿El indicador de hora no muestra la fecha/hora?

Ejemplos de comandos de fecha de Linux