Bueno, la forma más fácil de hacer esto sería usar ImageMagick . Debe estar en los repositorios de su distribución de Linux, para sistemas basados en Debian, ejecute:
sudo apt-get install imagemagick
Uno de los programas de la suite ImageMagick es identifyque imprimirá las características de una lista de archivos de imagen de entrada. Combinarlo con sortle dará una lista de imágenes ordenadas por tamaño (puede cambiar png para cualquier extensión que tenga:
identify *png | sort -gk 3
Si realmente necesita la relación de aspecto y no solo el tamaño, intente algo como esto:
Opción simple, supone que los nombres de sus imágenes no tienen espacios :
identify *png *jpg *gif | \
gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | \
sed 's/\[.\]//' | sort -gk 3
El comando gawk divide el tercer campo (el tamaño de la imagen que tiene el formato LxH) en los "tamaños" de la matriz y luego imprime el primer campo (el nombre de la imagen) y el resultado de dividir la longitud de la imagen por su altura. lossed comando simplemente embellece la salida y sortordena el resultado de acuerdo con la relación de tamaño de imagen.
Más complejo, este puede tratar con espacios en los nombres de archivo:
find . \( -iname "*png" -o -iname "*jpg" -o -iname "*gif" \) -exec identify {} \; |\
perl -ne '/(.+?)\s+[A-Z]{3}\s+(\d+)x(\d+)/; print "$1 ", $2/$3, "\n"' | \
sort -gk 2
Aquí estamos utilizando findpara identificar los archivos que nos interesan y ejecutar elidentify comando, y luego canalizar su salida a través de un pequeño script PERL. La expresión regular busca tres letras mayúsculas ( [A-Z]{3}) que deberían ser el formato de imagen. Una vez que hayamos encontrado eso, es fácil identificar el nombre y las dimensiones de la imagen.
No estoy usando gawk aquí porque la presencia de espacios en los nombres de los archivos de entrada confundirá los números de campo. Finalmente, el script imprimirá el nombre de la imagen y el resultado de la división de longitud / altura que sortnuméricamente.
Si simplemente explorar las relaciones de aspecto disponibles no es suficiente, si tiene al menos una imagen con la relación de aspecto deseada, solo use grep para extraer esas imágenes cuya relación es más cercana:
identify *png *jpg *gif | \
gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' |\
sed 's/\[.\]//' | sort -gk 3 | grep -C 10 GOOD_IMAGE.jpg
identify -format "%[fx:w/h]:%M\n" *.jpg. No sé cómo ordenar fácilmente por proximidad a un valor arbitrario.sortno parece apoyar tal clasificación.