Saltar al contenido

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

Esta es la respuesta más correcta que te podemos dar, pero mírala pausadamente y analiza si se puede adaptar a tu trabajo.

Solución:

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

    los -n opción a mv le dice a move que nunca sobrescriba un archivo existente.

  • done

    Esto completa el bucle.

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 la 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.

  • los 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 en el .jpg extensió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 mantener el nombre de archivo original:

mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"

¡Espero que ayude a los novatos como yo!

Recuerda algo, que tienes la capacidad de añadir una evaluación certera si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *