Renombrar y Ordenar Fotos Duplicadas
index | about | archive | charlas | docs | links
dot
|
git
|
img
|
plt
|
tty
|
uml
Caos por naturaleza
Amo el orden, pero soy un caos ;-) asi que desde hace años que vengo acumulando archivos en distintas computadoras, en varios discos rígidos, copiando por las dudas una y otras vez casi los mismos archivos con nombres muy similares y por sobre todas las cosas de manera muy desordenada.
Cada tanto hago el intento de ordenarlos, pero me pierdo en la revisión manual y suelo cambiar de criterio, por lo cual abandono el orden. Muchas veces también sucede que no logro tener 1 disco donde consolidar todos los backups parciales y provisorios para dejar un compilado completo y ordenado, suelo llenar discos en muy poco tiempo, en parte porque duplico archivos y backups de desconfiado nomás…
Ordenando un poco
Hace poco que vengo teniendo éxito en ordenar mi colección de fotos
digitales (y algunas digitalizadas), la solución vino de manera
automatizada, como no podía ser de otra forma, pero en lugar de
elegir una aplicación, opté como es costumbre, hacerlo a mano,
mediante un script en bash
(de cabezadura que soy!).
renombrar-fotos
Este script se encarga de generar un nombre de archivo único, a
partir del md5 y de la fecha que esta dentro de la imagen .jpg
mediante exif.
Partiendo de varios directorios desordenados, como por ejemplo el siguiente listado:
/mnt/data/fotos /mnt/data/fotos/fotos /mnt/data/fotos/fotos/monte2010/fotos /mnt/data/inspiron/Dropbox/gcoop/fotos /mnt/data/inspiron/charlas/campusparty-2012/fotos /mnt/data/inspiron/revisar/fotos /mnt/data/inspiron/revisar/pld/charlas/campusparty-2012/fotos /mnt/data/musica/fotos /mnt/sdb5/vodka/home/osiris/fotos /mnt/sdb9/bal/fotos /mnt/sdb9/bal/fotos/JRSL07/fotos
Se invoca al comando fotos-renombrar
de la siguiente manera:
cd /mnt fotos-ordenar
De esta manera el script buscará archivos *.jpg
en el directorio
actual (/mnt
), en caso de encontrar archivos JPEG, verificará
que efectivamente se tratan de archivos válidos usando file
para
identificar que contienen una imagen JPEG, luego se comprobará el
HASH mediante md5sum
y se verificará si existe un archivo con el
mismo HASH y/o el mismo nombre de archivo compuesto del HASH y
la extensión .jpg
, si es asi indicará que esta duplicado.
Luego con identify
verificamos que sea correcto el JPEG y en
caso se ser inválido, se renombra el archivo a HASH.jpg
.
Ahora viene lo interesante, extraer la metadata, básicamente la
fecha y hora de creación de la imagen, esto facilitará ordenarlas.
Se realizan varias comprobaciones y se renombra el archivo al
formato YYYY-MM-DD-HH-MM-HASH.jpg
usando jhead
. En el caso de
no contar con metadata se crea lo mínimo partiendo del timestamp
del archivo.
El resultado sería algo similar a esto:
2014-07-03-0935-2bb594.jpg 2014-07-03-0935-436e18.jpg 2014-07-03-0935-437eaa.jpg 2014-07-03-0935-6c5846.jpg 2014-07-03-0935-8d84be.jpg 2014-07-03-0935-da7f18.jpg 2014-07-03-0936-1ad076.jpg 2014-07-03-0936-9f6327.jpg 2014-07-03-0936-e01e7e.jpg
También se puede especificar el directorio con el parámetro -d
y
el nivel de subdirectorios a buscar usanod -l
:
fotos-renombrar -l 3 -d ~/ordenar
Hasta este paso conseguimos renombrar a todas las fotos por igual, bajo un mismo criterio y detectar las duplicadas! :-)
ordenar-fotos
Teniendo los archivos correctamente renombrados, se mueven a un
único directorio, por defecto /mnt/data/fotos
y se organizan en
la siguiente estructura:
cd /mnt/data/fotos && tree -d | grep 2014 | head
├── 2014 │ ├── 2014-01 │ │ ├── 2014-01-25 │ │ ├── 2014-01-26 │ │ ├── 2014-01-27 │ │ └── 2014-01-29 │ ├── 2014-03 │ │ ├── 2014-03-14 │ │ └── 2014-03-31 │ ├── 2014-04
Entonces los archivos quedarían asi:
cd /mnt/data/fotos && ls 2014/2014-01/2014-01-29/* | head
2014/2014-01/2014-01-29/2014-01-29-0844-24fc12.jpg 2014/2014-01/2014-01-29/2014-01-29-0844-b70a1e.jpg 2014/2014-01/2014-01-29/2014-01-29-0846-69dc1a.jpg
De manera similar al script anterior, se detectan los duplicados,
con la diferencia que el primer duplicado que se encuentre se moverá
al directorio de destino y guardarán en /duplicate
, esto es a los
fines de realizar una revisión manual, antes de tomar alguna
decisión. Un resultado posible sería:
fotos-ordenar duplicate file: /mnt/data/fotos/2014/2014-07/2014-07-15/2014-07-15-1044-ffb340.jpg move duplicate file: /mnt/data/fotos/duplicate/2014-07-15-1044-ffb340.jpg duplicate file: /mnt/data/fotos/2014/2014-07/2014-07-26/2014-07-26-1306-c9869d.jpg move duplicate file: /mnt/data/fotos/duplicate/2014-07-26-1306-c9869d.jpg duplicate file: /mnt/data/fotos/2014/2014-08/2014-08-06/2014-08-06-1855-b42d9c.jpg move duplicate file: /mnt/data/fotos/duplicate/2014-08-06-1855-b42d9c.jpg
Pero en el caso de encontrar un segundo duplicado, en base al HASH y no solamente al nombre del archivo, directamente se eliminará por ser idéntico.
fotos-ordenar duplicate file: /mnt/data/fotos/2014/2014-07/2014-07-15/2014-07-15-1044-ffb340.jpg delete re-duplicate file: 2014-07-15-1044-ffb340.jpg
Todo en orden?
Actualmente ambos scripts están en el repo media-bash-utils
y
se pueden obtener usando git
:
git clone https://github.com/osiris/media-bash-utils
Invito a probar los scripts y acepto cualquier sugerencia y/o mejora, desde ya que hay mucho más que se puede hacer, por ejemplo se me ocurren las siguientes ideas:
- ante duplicados, comparar tamaños en pixels y conservar las fotos más grandes.
- detectar imágenes muy similares.
- aplicar operaciones varias como compresión, marcas de agua, etc.
- generar tamaños alternativos y/o unificar tamaños de previews.
Una de las mayores ventajas es el ahorro de espacio en disco, pero por sobre todo el poder consolidarlas, eliminar los duplicados y dejar de hacerlo manualmente, todo es automático y a medida que vayan apareciendo casos se puede ir mejorando y reorganizando una y otra vez a todas las fotos con exactamente el mismo criterio.
ChangeLog
2023-06-19 20:09
agregar DESCRIPTION, KEYWORDS y actualizar OpenGraph en Renombrar y Ordenar Fotos Duplicadas2022-11-13 20:39
agregar y actualizar tags OpenGraph2019-04-18 00:21
Agregar hora en header date2019-04-18 00:01
Corregir identación header #+INCLUDE:2015-07-03 04:31
@ 00:05 hs - elimino #+OPTIONS: de todos los archivos excepto header.org2015-07-03 03:59
@ 01:00 hs - reemplazo :alt por :title y cambios menores2015-01-10 12:07
@ 02:07 hs - agrego renombrar y ordenar fotos duplicadas, actualizo index y blog