Ну, найпростіший спосіб зробити це було б використовувати ImageMagick . Він повинен бути у сховищах вашого дистрибутива Linux, для систем на базі debian запускайте:
sudo apt-get install imagemagick
Одна з програм набору ImageMagick полягає в тому identify
, що це буде надрукувати характеристики списку вхідних файлів зображень. Поєднавши його sort
, ви отримаєте список зображень, відсортованих за розміром (ви можете змінити png за будь-яким розширенням, яке ви маєте:
identify *png | sort -gk 3
Якщо вам потрібне співвідношення сторін, а не лише розмір, спробуйте щось подібне:
Простий варіант, припускаючи, що назви ваших зображень не мають пробілів :
identify *png *jpg *gif | \
gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | \
sed 's/\[.\]//' | sort -gk 3
Команда gawk розбиває 3-е поле (розмір зображення, який має формат LxH) в масив "розміри", після чого друкує 1-е поле (назва зображення) та результат ділення довжини зображення на його висоту. sed
Команда просто прикрашає висновок і sort
команда сортує результат по співвідношенню розміру зображення.
Більш складний, він може мати справу з пробілами у назвах файлів:
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
Тут ми використовуємо find
для виявлення цікавлять нас файлів і запускаємо identify
команду, а потім проводимо її вихід через невеликий сценарій PERL. Регулярний вираз шукає три великі літери ( [A-Z]{3}
), які мають бути форматом зображення. Як тільки ми це виявили, легко визначити назву зображення та розміри зображення.
Я не використовую тут gawk, оскільки наявність пробілів у назвах вхідних файлів буде заплутати номери полів. Нарешті, сценарій роздрукує ім'я зображення та результат поділу довжини / висоти, яке ми sort
числимо.
Якщо просто переглядати наявні співвідношення сторін недостатньо, якщо у вас є принаймні одне зображення з потрібним співвідношенням сторін, просто використовуйте grep, щоб витягти зображення, співвідношення яких найближче:
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
. Я не знаю, як легко сортувати за близькістю до довільного значення.sort
схоже, не підтримує таке сортування.