Поиск изображений PNG размером больше x пикселей через оболочку Linux

Когда вы пытаетесь изменить дизайн своего веб-сайта, вам нужно учитывать ширину изображений в содержании статьи. У меня есть заведомо большие скриншоты по большинству статей, которые я написал, поэтому, если я хочу увеличить боковую панель, важно выяснить, какие картинки будут слишком широкими, чтобы соответствовать новому дизайну.

Поскольку я программист, мне было бы легко написать небольшое приложение для этого, но это заставило меня задуматься… почему я не могу сделать это в командной строке Linux?

Первое, что я понял, было то, что изображения PNG отображают данные о размере, когда вы запускаете для них команду «file»:

$ file image3.png
image3.png: данные изображения PNG, 613 x 657, 8-битный/цветной RGBA, без чередования

Очень полезно, так как 99% изображений на этом сайте в формате PNG. Так что теперь, чтобы бросить это в цикле для всех файлов в моем каталоге загрузки:

$ для f в * .png; сделать файл $ f; сделано

image.png: данные изображения PNG, 631 x 185, 8-битная/цветная RGBA, без чередования
image1.png: данные изображения PNG, 631 x 96, 8-битная/цветная RGBA, без чересстрочной развертки />image10.png: данные изображения PNG, 375 x 395, 8-битная/цветная RGBA, без чередования
image11.png: данные изображения PNG, 484 x 241, 8-битная/цветная RGBA, без чередования
-snipped-

Это более полезно, но мне нужно было перенести данные в Excel или подобное приложение, чтобы отсортировать данные, поэтому я решил использовать команду linux «cut», чтобы вытащить только столбец width.

Вы заметите, что параметр -f5 заставляет cut брать пятый столбец, а -d \ с пробелом после него указывает cut использовать пробел в качестве разделителя. Косая черта \ символ — это escape-символ, который указывает оболочке использовать пробел в качестве символа, а не в качестве пробела.

$ для f в * .png; сделать файл $ f | cut -f5 -d \; done

631
631
375
484
-snipped-

Не совсем полезный вывод, не так ли? Давайте протолкнем это через оператор bash if, а затем покажем вывод команды file только тогда, когда ширина больше 600 пикселей.

Обратите внимание на знаки `(backtick) вокруг“ файла $ f | раздел… », который указывает, что команды внутри` будут обработаны как один вывод и переданы в оператор if, где мы используем -gt (больше, чем). Также обратите внимание, что вам нужны пробелы по обеим сторонам скобок []

для f в * .png; делать, если [`file $ f | cut -f5 -d \ `-gt 600]; затем файл $ f; fi; готово

image.png: данные изображения PNG, 631 x 185, 8-битная/цветная RGBA, без чередования
image1.png: данные изображения PNG, 631 x 96, 8-битная/цветная RGBA, без чересстрочной развертки />image17.png: данные изображения PNG, 638 x 340, 8-битная/цветная RGBA, без чередования
image18.png: данные изображения PNG, 608 x 448, 8-битная/цветная RGBA, без чередования
-snipped-

Теперь у нас есть список всех файлов шириной более 600 пикселей. Вы можете настроить «файл $ f» в конце, чтобы просто выводить имена файлов, если вам нужно скопировать или переместить их в другое место:

для f в * .png; делать, если [`file $ f | cut -f5 -d \ `-gt 600]; затем эхо $ f; fi; сделано

image.png
image1.png
image17.png
image18.png
-snipped-

Оболочка Linux невероятно мощная! Это решение не очень практично для всех, но полезно знать, как работать с оболочкой, чтобы вы могли выполнять такие задачи, когда вам это необходимо.

Оцените статью
TutoryBird.Ru
Добавить комментарий