Hace poco me encontré queriendo ordenar una carpeta de fondos de pantalla por resolución, en lugar de otros métodos de ordenación más típicos como por nombre o tamaño. Así que buscando un poco encontré la respuesta en superuser. El usuario flammable preguntaba cómo ordenar imágenes por resolución. La respuesta es la siguiente:



El script

#!/bin/bash

for image in *.jpg *.JPG *.jpeg *.JPEG *.gif *.GIF *.bmp *.BMP *.png *.PNG;
do
   res=$(identify -format %wx%h\\n "$image");
   mkdir -p $res;
   mv "$image" $res;
done

Yo lo modifiqué un poco acorde a mis necesidades:

#!/bin/bash

cd /ruta/mis/fondos

for image in *.jpg *.png;
do
   res=$(identify -format %wx%h\\n "$image");
   mkdir -p /tmp/fondos/$res;
   cp "$image" /tmp/fondos/$res;
done

Para no modificar las imágenes originales, ya que están en Drive, y así poder seleccionar las que eliminar posteriormente.

Qué hace el script

Tras ésto, tenemos organizadas todas las imágenes en carpetas por resolución. Mi objetivo era eliminar las de menor resolución, así que fui apuntando dichas imágenes para luego borrarlas en la carpeta original (La de Drive), donde están todas juntas. Tras almacenar en un archivo los nombres de las imágenes a borrar, ejecuté el siguiente comando en la carpeta original:

for i in $(cat ../ABorrar)
do
   find /Carpeta/original/ -iname $i -exec rm '{}' \;
done

Renombrar las imágenes para que contengan su resolución

Como menciona Juanjo en el comentario, otra opción más adecuada es renombrar cada imagen con su resolución, para ello el siguiente script podría servir:

#!/bin/bash

cd /ruta/imagenes/

for image in *.jpg *.png;
do
    res=$(identify -format %wx%h\\n "$image");
    rename "s/^/[$res] - /" "$image"
done

Así, las imágenes quedarán, por ejemplo, [1280x1024] - nombre original.jpg.

Referencias

How to sort images into folders, based on resolution? »» superuser.com

Índice