GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo cambiar el nombre de varias fotos y videos según los datos Exif?

A menudo importo fotos y videos (principalmente con extensiones JPG y MOV) de cámaras digitales y tabletas a mi PC, e idealmente me gustaría verlos ordenados según las fechas y horas en que fueron tomados ya presente en sus datos EXIF. Y de ahí mi deseo de renombrarlos a todos preferiblemente usando un simple Nautilus Script preferiblemente insertando las marcas de fecha y hora antes de cada nombre de archivo.

Hasta ahora solo he logrado reunir el siguiente Nautilus Script, que creo que está lejos de ser perfecto:

for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" 
done

Lo que no me gusta de este método de cambio de nombre son los dos puntos usados ​​en las marcas de fecha y hora EXIF (p. ej., “2013:09:03 20:55:09_IMG_0108.JPG”), lo que podría generar problemas al transferir estos archivos posteriormente a otros entornos (p. ej., Windows).

Este comando (usando exiv2 en lugar de exiftool ) permite convenientemente la manipulación de marcas de fecha y hora, pero su inconveniente es que no funciona en archivos de video (por ejemplo, MOV) :

exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"

Así que espero que alguien pueda encontrar una solución mejor. ¡Y sería mágico si incluso lograra convertir los nombres de archivo originales y las extensiones a minúsculas también!

Respuesta aceptada:

Lo que no me gusta de este método de cambio de nombre son los dos puntos que se utilizan en las marcas de fecha y hora EXIF ​​(p. ej., "2013:09:03 20:55:09_IMG_0108.JPG"), que pueden crear problemas al transferir estos archivos más adelante a otros entornos ( por ejemplo, Windows).

Puede ejecutar el esquema de nombres a través de sed , para reemplazar los dos puntos con guiones y los espacios con guiones bajos, así:

mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"

En cuanto a poner todo en minúsculas, podría usar rename :

rename 's/(.*)/\L$1/' file.JPG
##  or
rename 's/(.*)/\L$1/' *.*

O podría hacerlo dentro de su script usando sed , como en:

j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')

…y luego usa el $j variable en lugar del $i final de tu mv línea. Esta forma de sed es un poco más portátil (si eso te importa) ya que las diferentes distribuciones de Linux tienen diferentes comandos de cambio de nombre, mientras que sed es universal.

O, alternativamente, la secuencia de comandos se puede modificar de la siguiente manera para realizar la conversión de nombre de archivo a minúsculas al principio usando tr en cambio:

for arg 
do
  tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
  mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done

Para ejecutar comandos ligeramente diferentes para diferentes tipos de archivos, se puede usar una declaración de caso bash en este script. Por ejemplo:

#! /usr/bin/env bash
for filename in ./*
do
  tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
  case "$filename" in
    *.MOV|*.mov) 
      mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
      ;;
    *.JPG|*.jpg)
      mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
      ;;
    *)
      echo 'Not a *.jpg or a *.mov!'
      ;;
  esac
done

En este ejemplo, el cambio de nombre de los archivos MOV que tienen marcas de tiempo CreateDate CUALQUIER NÚMERO de horas DESPUÉS O ANTES de los archivos JPG se ajusta utilizando otros datos EXIF ​​(-tur) y eliminando ese sufijo de diferencia horaria, y podría ser necesario cambiar -tur parte de acuerdo con la ubicación establecida en el sistema.


Ubuntu
  1. Por qué los datos son importantes y cómo protegerlos

  2. ¿Cómo cambiar el nombre de un usuario de forma segura?

  3. ¿Cómo organizar/ordenar imágenes por datos de imagen Exif?

  4. Cómo cambiar el nombre de varios archivos a la vez en Linux

  5. Cómo cambiar el nombre de Git Branch Local y Remote

Cómo cambiar el nombre de archivos y directorios en Ubuntu 20.04

Fwbackups:cómo instalar y hacer una copia de seguridad de sus datos en Ubuntu

Cómo fusionar datos en Linux

Cómo instalar ELK Stack (Elasticsearch, Logstash y Kibana) en Ubuntu 20.04

Cómo eliminar datos de archivo Exif con ExifTool en Ubuntu 20.04

Cómo cambiar el nombre de archivos y directorios en Linux